1. Summary

1.1 Summary table

A total of 306,021 persons have been reached by EiE activities in 2023, of which 127,370 were boys, 121,766 were girls, 43,725 were men and 13,160 were women. Below is a summary by indicator.


Summary statistics for EIE 5Ws reporting, 25 June 2023

Indicator

Partners

Counties

June_reached1

Total_reached

Target

%Target

1. Access ECD spaces/schools

11

14

7,238

188,406

1,201,151

15.69

2. Feeding programmes

9

6

1,456

48,249

784,647

6.15

3. Teaching materials

9

10

0

146,339

600,578

24.37

4. Safe water, personal hygiene

6

5

0

27,228

784,647

3.47

5. Educators resilience enhancing

13

12

729

4,859

6,018

80.74

6. Children resilience enhancing

12

12

2,592

64,507

154,729

41.69

Total

33

18

12,015

306,0212

2,146,5452

14.26

1Distinct number of schools not available as full list of schools is not reported

2Only the sum of indicators 1, 2, 5 and 6




1.2 By sex and age


Only Indicator 6, Children benefiting from resilience-enhancing programming, sees a higher proportion of females reached over men.





1.3 By county

39.8% of all beneficiaries reached originate from Turkana, though it only has 14.05% of the targeted population.


IPC data extracted from here.




2. Progress by indicator

2.1 Overall progress




2.2 Reached by indicator

2.2.1 Access to ECD spaces/schools


EiE Indicator 1, as of 25 June 2023

Indicator

Partners

Counties

June_reached

Total_reached

Target

%Target

1. Access ECD spaces/schools

11

14

7,238

188,406

1,201,151

15.69



In June 2023, 7,238 persons were reached by interventions contributing to this indicator, of which 3,486 were boys and 3,220 were girls.





2.2.2 School feeding programmes


EiE Indicator 2, as of 25 June 2023

Indicator

Partners

Counties

June_reached

Total_reached

Target

%Target

2. Feeding programmes

9

6

1,456

48,249

784,647

6.15



In June 2023, 1,456 persons were reached by interventions contributing to this indicator, of which 783 were boys and 673 were girls.





2.2.3 Teaching and learning materials


EiE Indicator 3, as of 25 June 2023

Indicator

Partners

Counties

June_reached

Total_reached

Target

%Target

3. Teaching materials

9

10

0

146,339

600,578

24.37



In June 2023, 0 persons were reached by interventions contributing to this indicator, of which 0 were boys, 0 were girls, 0 were men and 0 were women.





2.2.4 Safe water, personal hygiene


EiE Indicator 4, as of 25 June 2023

Indicator

Partners

Counties

June_reached

Total_reached

Target

%Target

4. Safe water, personal hygiene

6

5

0

27,228

784,647

3.47



In June 2023, 0 persons were reached by interventions contributing to this indicator, of which 0 were boys and 0 and were girls.





2.2.5 Educators trained in resilience enhancing programmes


EiE Indicator 5, as of 25 June 2023

Indicator

Partners

Counties

June_reached

Total_reached

Target

%Target

5. Educators resilience enhancing

13

12

729

4,859

6,018

80.74



In June 2023, 729 persons were reached by interventions contributing to this indicator, of which 474 were men and 255 and were women.





2.2.6 Children benefited from resilience enhancing programmes


EiE Indicator 6, as of 25 June 2023

Indicator

Partners

Counties

June_reached

Total_reached

Target

%Target

6. Children resilience enhancing

12

12

2,592

64,507

154,729

41.69



In June 2023, 2,592 persons were reached by interventions contributing to this indicator, of which 1,330 were boys and 1,262 and were girls





3. Partners

3.1 Operational presence of implementing partners



Below is an interactive table which adds detail to the map above, serving additional information for coordination – allowing interested parties to search by county or partner.

The column #Activities refers to the number of Education activities implemented by said partner in each county. Each column can be sorted with the arrows next to each column name. Each column can also be filtered by typing into the search bar below each column name. Only completed activities have been included.

Download the dataset below here.





3.2 Summary by implementing partner

The table below breaks down persons reached by partner.


Summary by implementing partner

implementing_partner

reached1

counties

activities

%total2

Finn Church Aid

187,433

5

6

39.08

Homa Bay County

57,020

1

1

11.89

Norwegian Refugee Council

52,914

2

3

11.03

World Vision Kenya

32,353

6

6

6.75

Women Educational Researchers of Kenya

23,122

5

2

4.82

We World

20,947

2

1

4.37

Lifeskills Promoters

19,199

2

3

4.00

Save the Children

19,062

5

3

3.97

Food for the Hungry

17,974

2

4

3.75

Jesuit Refugee Service

14,854

1

1

3.10

AVSI Foundation

9,768

2

3

2.04

MOE

8,241

1

2

1.72

Action for Sustainable Change

4,160

1

3

0.87

Nawiri Children Development Program

3,487

1

2

0.73

Mondi

2,197

1

1

0.46

Qatar Charity

1,541

1

1

0.32

Bartabwa

849

1

1

0.18

Special Olympics Kenya

848

3

1

0.18

The Girl Child Network

700

2

1

0.15

CDE Mandera

600

1

1

0.13

Frontiers Community Development Program

491

1

1

0.10

CDE Wajir

361

1

1

0.08

Girl Child Network

350

1

1

0.07

ERIKs Development Partner

249

1

1

0.05

Servants of the Poor

202

1

1

0.04

Windle International Kenya

196

1

1

0.04

Dignitas

135

1

1

0.03

SMB

135

1

1

0.03

Missionary Sisters of the Catechism

85

1

1

0.02

Voluntary Service Overseas

42

1

1

0.01

Futebol da Forcaa, Moving the Goalposts -Kilifi

40

1

1

0.01

Evangelizing Sisters of Mary

23

1

1

0.00

IWS

10

1

2

0.00

1All indicators as opposed only indicators 1, 2, 5 and 6

2Percentage of reached for all indicators




4. Schools and education level

4.1 Schools

The number of schools reached by school feeding programmes and WASH in schools interventions to-date are:



However, reporting the overall number of schools reached by all EiE interventions is much more challenging.

Whilst all partners working on indicators 2 and 4 submitted the number of schools they were working in, the same is not true for the other indicators. Only indicators 2 and 4 require the reporting of the number of schools.




4.2 Education level

The data collected on education level is muddled: the combination of various categories (such as ECE & Primary and All Basic Education) hampers a clean breakdown by education level:


Children reached by education level

education_level

children

%_of_total

Primary

247,601

55.04

ECE & Primary

134,071

29.80

All Basic Education

26,104

5.80

ECE

24,084

5.35

Secondary

17,976

4.00

Vocational

23

0.01

Tertiary

20

0.00


For instance, it is not possible to calculate the number of children served from primary-level institutions.

To understand reporting around the mismatch of education-level categories, let us examine individual indicators. In the plot below, children reached have been broken down by education level and by indicator. The category All Basic Education, whilst present in all of the indicators, is most heavily used in the WASH-in-schools intervention. Additionally, this indicator is used by 5 different implementing partners.





5. Reference maps and tables

5.1 Reference maps

IPC data extracted from here.




5.2 Reference table

Download the EiE 5Ws data here

As a refresher for the reference table below, the indicators are:


indicator

indicator 1 # of children and youth accessing ECD spaces/schools in drought affected areas

indicator 2 # of schools/ECD spaces with feeding programmes

indicator 3 # of learners and teachers reached with learning and teaching materials

indicator 4 # of schools with adequate quantites of safe water for drinking and personal hygiene

indicator 5 # of teachers / educators trained on resilience enhancing programmes (MHPSS, DRR & Life Skills, etc)

indicator 6 # of children and youth benefiting from resilience enhancing programmes (MHPSS, DRR & Life Skills, etc)


LS0tDQp0aXRsZTogIktlbnlhIEVkdWNhdGlvbiBpbiBFbWVyZ2VuY2llcyBXb3JraW5nIEdyb3VwIC0tIERyb3VnaHQgNVdzIFJlcG9ydCINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgdGhlbWU6IHJlYWRhYmxlDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogbm8NCiAgICBjb2xsYXBzZWQ6IG5vDQphbHdheXNfYWxsb3dfaHRtbDogeWVzDQotLS0NCg0KYGBge2NzcywgZWNobz1GQUxTRX0NCg0KI1RPQzo6YmVmb3JlIHsNCiAgY29udGVudDogIiI7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBoZWlnaHQ6IDUwcHg7DQogIG1hcmdpbjogMmVtIDIwcHggNDBweCAyMHB4Ow0KICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9rZW55YS1laWUtd2cvZWllX3dnXzV3cy9tYWluL2VpZV93Z19sb2dvLnBuZyIpOw0KICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47DQogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7DQogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQp9DQpgYGANCg0KYGBgez1odG1sfQ0KPHN0eWxlPg0KICAgIGJvZHkgLm1haW4tY29udGFpbmVyIHsNCiAgICAgICAgbWF4LXdpZHRoOiAxMjgwcHg7DQogICAgfQ0KPC9zdHlsZT4NCmBgYA0KDQoNCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBmaWcud2lkdGg9OSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShzdHJpbmdpKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KHZpcmlkaXMpDQpsaWJyYXJ5KHBhdGNod29yaykNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KGhlcmUpDQpsaWJyYXJ5KHNmKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KGZsZXh0YWJsZSkNCmxpYnJhcnkoZ2dyZXBlbCkNCmxpYnJhcnkoYW55dGltZSkNCmxpYnJhcnkodGlkeXRleHQpDQpsaWJyYXJ5KGdnc2ZsYWJlbCkNCg0KdGhlbWVfc2V0KHRoZW1lX2xpZ2h0KCkpDQoNCiMgSW5zdGFsbGF0aW9uIG9mIG1kZXByaXYgcGFja2FnZQ0KIyBpbnN0YWxsIHBhY2thZ2UgZGV2dG9vbHMgaWYgbm90IHlldCBpbnN0YWxsZWQNCiMgICBpbnN0YWxsLnBhY2thZ2VzKCJkZXZ0b29scyIpDQoNCiMgaW5zdGFsbCBmYXN0IGZyb20gR2l0SHViIHdpdGhvdXQgdmlnbmV0dGVzIA0KIyAgIGRldnRvb2xzOjppbnN0YWxsX2dpdGh1YigiYS1iZW5pbmkvbWRlcHJpdiIsIGJ1aWxkX3ZpZ25ldHRlcyA9IEZBTFNFDQoNCiMgQWx0ZXJuYXRpdmVseSwgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaGVyZTogaHR0cHM6Ly9hLWJlbmluaS5naXRodWIuaW8vbWRlcHJpdi8NCg0KIyBkaXNhYmxpbmcgc2NpZW50aWZpYyBub3RhdGlvbg0Kb3B0aW9ucyhzY2lwZW4gPSAxMDApDQoNCmAlb3V0JWAgPC0gTmVnYXRlKGAlaW4lYCkNCg0KIyBmdW5jdGlvbiBmb3IgdHJhbnNwb3NpbmcgZGYNCnRyYW5zcG9zZV9kZiA8LSBmdW5jdGlvbihkZikgew0KICB0X2RmIDwtIGRhdGEudGFibGU6OnRyYW5zcG9zZShkZikNCiAgY29sbmFtZXModF9kZikgPC0gcm93bmFtZXMoZGYpDQogIHJvd25hbWVzKHRfZGYpIDwtIGNvbG5hbWVzKGRmKQ0KICB0X2RmIDwtIHRfZGYgJT4lDQogICAgdGliYmxlOjpyb3duYW1lc190b19jb2x1bW4oLmRhdGEgPSAuKSAlPiUNCiAgICB0aWJibGU6OmFzX3RpYmJsZSguKQ0KICByZXR1cm4odF9kZikNCn0NCg0KIyBzY2FsaW5nIGZ1bmN0aW9ucyANCnJhbmdlMDEgPC0gZnVuY3Rpb24oeCl7KHgtbWluKHgpKS8obWF4KHgpLW1pbih4KSl9DQpyYW5nZV93bmEgPC0gZnVuY3Rpb24oeCl7KHgtbWluKHgsIG5hLnJtID0gVFJVRSkpLyhtYXgoeCwgbmEucm0gPSBUUlVFKS1taW4oeCwgbmEucm0gPSBUUlVFKSl9DQoNCiMgbW9kZSBmdW5jdGlvbiANCm1vZGUgPC0gZnVuY3Rpb24oeCkgew0KICB1eCA8LSB1bmlxdWUoeCkNCiAgdXhbd2hpY2gubWF4KHRhYnVsYXRlKG1hdGNoKHgsIHV4KSkpXQ0KfQ0KDQojIEZpeGluZyBkYXRlcw0KbmFtZV90b19kYXRlIDwtIGZ1bmN0aW9uKHgpIHsNCiAgbHVicmlkYXRlOjptZHkoaWZlbHNlKHggJWluJSBjKG1vbnRoLm5hbWUsIG1vbnRoLmFiYiksIHBhc3RlMCh4LCAiLzAxLzIwMjMiKSwgeCkpDQp9DQpgYGANCg0KDQoNCg0KYGBge3J9DQpsb2NhdGlvbnMgPC0gcmVhZF94bHN4KCIuL2RhdGEva2VuX2FkbWluYm91bmRhcmllc190YWJ1bGFyZGF0YS54bHN4IiwgDQogICAgICAgICAgICAgICAgICAgICAgc2hlZXQgPSAiQURNMiIpICU+JSANCiAgY2xlYW5fbmFtZXMoKQ0KDQplaWUgPC0gcmVhZF9jc3YoIi4vZGF0YS9laWVfNXdzLmNzdiIpICU+JSANCiAgZmlsdGVyKCFpcy5uYShpbmRpY2F0b3Jfc2hvcnQpKQ0KDQpyZXBvcnRfZGF0ZSA8LSAiMjUgSnVuZSAyMDIzIg0KDQpyZXBvcnRfbW9udGggPC0gIkp1bmUiDQoNCnNpdHJlcF90YWJsZSA8LSByZWFkX3hsc3goIi4vZGF0YS9zaXRyZXBfcmVzdWx0c190YWJsZS54bHN4IikgJT4lIA0KICBjbGVhbl9uYW1lcygpDQoNCnRhcmdldHMgPC0gcmVhZF9jc3YoIi4vZGF0YS9laWVfdGFyZ2V0cy5jc3YiKQ0KDQpwY29kZTFfc2hhcGUgPC0gDQogIHNmOjpzdF9yZWFkKCIuL2RhdGEva2VuX2FkbV9pZWJjXzIwMTkxMDMxX3NocC9rZW5fYWRtYm5kYV9hZG0xX2llYmNfMjAxOTEwMzEuc2hwIiwgDQogICAgICAgICAgcXVpZXQgPSBUUlVFKSAlPiUgDQogIGNsZWFuX25hbWVzKCkNCg0KaXBjIDwtIHJlYWRfY3N2KCIuL2RhdGEvaXBjLmNzdiIpDQoNCnBhcnRuZXJfbGlzdF9jb3VudGllcyA8LSByZWFkX2NzdigiLi9kYXRhL3BhcnRuZXJfbGlzdF9jb3VudGllcy5jc3YiKSAlPiUgDQogIGZpbHRlcihwYXJ0bmVyX3R5cGUgPT0gImltcGxlbWVudGluZ19wYXJ0bmVyIikNCmBgYA0KDQoNCg0KPGJyPjxicj48YnI+DQoNCiMgMS4gU3VtbWFyeQ0KDQojIyAxLjEgU3VtbWFyeSB0YWJsZQ0KDQpgYGB7cn0NCnN1bV9zdGF0cyA8LSBlaWUgJT4lICANCiAgc3VtbWFyaXNlKHBhcnRuZXJzID0gbl9kaXN0aW5jdChpbXBsZW1lbnRpbmdfcGFydG5lciksIA0KICAgICAgICAgICAgY291bnRpZXMgPSBuX2Rpc3RpbmN0KGNvdW50eSksIA0KICAgICAgICAgICAgcmVhY2hlZCA9IHN1bShzZWN0b3JfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBtZW4gPSBzdW0obWVuW3N0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMXwyfDV8NiIpICYgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiXSwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICB3b21lbiA9IHN1bSh3b21lbltzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjF8Mnw1fDYiKSAmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIl0sIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgYm95cyA9IHN1bShib3lzW3N0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMXwyfDV8NiIpICYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIl0sIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgZ2lybHMgPSBzdW0oZ2lybHNbc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIxfDJ8NXw2IikgJiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiXSwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICByZWFjaGVkXzEyNTYgPSBzdW0odG90YWxfcmVhY2hlZFtzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjF8Mnw1fDYiKSAmIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCJdLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGxhdGVzdF9yZWFjaGVkID0gc3VtKHRvdGFsX3JlYWNoZWRbc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIxfDJ8NXw2IikgJiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiJiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aCAlaW4lIHJlcG9ydF9tb250aF0sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmEucm0gPSBUUlVFKSkNCg0KYGBgDQoNCkEgdG90YWwgb2YgYHIgc3VtX3N0YXRzICU+JSBwdWxsKHJlYWNoZWRfMTI1NikgJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHBlcnNvbnMgaGF2ZSBiZWVuIHJlYWNoZWQgYnkgRWlFIGFjdGl2aXRpZXMgaW4gMjAyMywgb2Ygd2hpY2ggYHIgc3VtX3N0YXRzICU+JSBwdWxsKGJveXMpICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCB3ZXJlIGJveXMsIGByIHN1bV9zdGF0cyAlPiUgcHVsbChnaXJscykgJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgZ2lybHMsIGByIHN1bV9zdGF0cyAlPiUgcHVsbChtZW4pICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCB3ZXJlIG1lbiBhbmQgYHIgc3VtX3N0YXRzICU+JSBwdWxsKHdvbWVuKSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSB3b21lbi4gQmVsb3cgaXMgYSBzdW1tYXJ5IGJ5IGluZGljYXRvci4gDQoNCg0KDQo8YnI+DQoNCmBgYHtyfQ0KDQoNCnN1bW1hcnlfdGFibGUgPC0gZWllICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBtdXRhdGUobGF0ZXN0X3JlYWNoZWQgPSBpZmVsc2UobW9udGggJWluJSByZXBvcnRfbW9udGgsIHRvdGFsX3JlYWNoZWQsIE5BX2ludGVnZXJfKSkgJT4lIA0KICBncm91cF9ieShpbmRpY2F0b3Jfc2hvcnQpICU+JSANCiAgc3VtbWFyaXNlKHBhcnRuZXJzID0gbl9kaXN0aW5jdChpbXBsZW1lbnRpbmdfcGFydG5lciksIA0KICAgICAgICAgICAgY291bnRpZXMgPSBuX2Rpc3RpbmN0KGFkbTFfcGNvZGUpLCAgIA0KICAgICAgICAgICAgbGF0ZXN0X3JlYWNoZWQgPSBzdW0obGF0ZXN0X3JlYWNoZWQsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgdG90YWxfcmVhY2hlZCA9IHN1bSh0b3RhbF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIGFkb3JuX3RvdGFscygicm93IiwsLCwgbGF0ZXN0X3JlYWNoZWQsIHRvdGFsX3JlYWNoZWQpICU+JSANCiAgbXV0YXRlKHBhcnRuZXJzID0gaWZlbHNlKGluZGljYXRvcl9zaG9ydCA9PSAiVG90YWwiLCBzdW1fc3RhdHMkcGFydG5lcnMsIHBhcnRuZXJzKSwgDQogICAgICAgICBjb3VudGllcyA9IGlmZWxzZShpbmRpY2F0b3Jfc2hvcnQgPT0gIlRvdGFsIiwgc3VtX3N0YXRzJGNvdW50aWVzLCBjb3VudGllcyksIA0KICAgICAgICAgdG90YWxfcmVhY2hlZCA9IGlmZWxzZShpbmRpY2F0b3Jfc2hvcnQgPT0gIlRvdGFsIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bV9zdGF0cyRyZWFjaGVkXzEyNTYsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF9yZWFjaGVkKSwgDQogICAgICAgICBsYXRlc3RfcmVhY2hlZCA9IGlmZWxzZShpbmRpY2F0b3Jfc2hvcnQgPT0gIlRvdGFsIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1fc3RhdHMkbGF0ZXN0X3JlYWNoZWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0ZXN0X3JlYWNoZWQpKSAlPiUgDQogIGxlZnRfam9pbih0YXJnZXRzICU+JSANCiAgICAgICAgICAgICAgZmlsdGVyKHRhcmdldF91bml0ID09ICJwZW9wbGUiKSAlPiUNCiAgICAgICAgICAgICAgZ3JvdXBfYnkoaW5kaWNhdG9yX3Nob3J0KSAlPiUNCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHRhcmdldCA9IHN1bShjb3VudHlfdGFyZ2V0KSksIA0KICAgICAgICAgICAgYnkgPSAiaW5kaWNhdG9yX3Nob3J0IikgJT4lIA0KICBtdXRhdGUodGFyZ2V0ID0gaWZlbHNlKGluZGljYXRvcl9zaG9ydCA9PSAiVG90YWwiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzICU+JSBkaXN0aW5jdChjb3VudHksIGNvdW50eV9vdmVyYWxsX3RhcmdldCkgJT4lIHtzdW0oLiRjb3VudHlfb3ZlcmFsbF90YXJnZXQpfSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0KSkgJT4lIA0KICBtdXRhdGUocGMgPSByb3VuZCh0b3RhbF9yZWFjaGVkIC8gdGFyZ2V0ICogMTAwLCBkaWdpdHMgPSAyKSkgJT4lDQogIHNlbGVjdChpbmRpY2F0b3IgPSBpbmRpY2F0b3Jfc2hvcnQsIHBhcnRuZXJzLCBjb3VudGllcywgDQogICAgICAgICBsYXRlc3RfcmVhY2hlZCwgdG90YWxfcmVhY2hlZCwgdGFyZ2V0LCBgJXRhcmdldGAgPSBwYykgJT4lDQogIHNlbGVjdF9hbGwofiBnc3ViKCJsYXRlc3QiLCANCiAgICAgICAgICAgICAgICAgICAgcmVwb3J0X21vbnRoLCAuKSkgJT4lDQogIHNlbGVjdF9hbGwofiBzdHJfdG9fdGl0bGUoLikpICANCg0Kc3VtbWFyeV90YWJsZSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF9jYXB0aW9uKHBhc3RlMCgiU3VtbWFyeSBzdGF0aXN0aWNzIGZvciBFSUUgNVdzIHJlcG9ydGluZywgIiwgcmVwb3J0X2RhdGUpKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOTkpICU+JSANCiAgZm9udHNpemUoaSA9IDE6NiwgaiA9IDEsIHNpemUgPSA5KSAlPiUgDQogIGZvbnRzaXplKHNpemUgPSA5LCBwYXJ0ID0gImhlYWRlciIpICU+JSANCiAgZm9vdG5vdGUoaSA9IDEsIGogPSA0LCBwYXJ0ID0gImhlYWRlciIsIHJlZl9zeW1ib2xzID0gIjEiLCANCiAgICAgICAgICAgYXNfcGFyYWdyYXBoKCJEaXN0aW5jdCBudW1iZXIgb2Ygc2Nob29scyBub3QgYXZhaWxhYmxlIGFzIGZ1bGwgbGlzdCBvZiBzY2hvb2xzIGlzIG5vdCByZXBvcnRlZCIpKSAlPiUgDQogIGZvb3Rub3RlKGkgPSA3LCBqID0gNTo2LCByZWZfc3ltYm9scyA9ICIyIiwgDQogICAgICAgICAgIGFzX3BhcmFncmFwaCgiT25seSB0aGUgc3VtIG9mIGluZGljYXRvcnMgMSwgMiwgNSBhbmQgNiIpKQ0KDQogIA0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQojIyAxLjIgQnkgc2V4IGFuZCBhZ2UNCg0KDQpgYGB7cn0NCmVpZSAlPiUgDQogIG11dGF0ZShpbmRpY2F0b3Jfc2hvcnQgPSBmY3RfcmV2KGluZGljYXRvcl9zaG9ydCkpICU+JQ0KICBtdXRhdGVfYXQodmFycyhib3lzLCBnaXJscywgbWVuLCB3b21lbiksIH4gcmVwbGFjZV9uYSguLCAwKSkgJT4lIA0KICBncm91cF9ieShpbmRpY2F0b3Jfc2hvcnQpICU+JSANCiAgc3VtbWFyaXNlX2F0KHZhcnMoYm95cywgZ2lybHMsIG1lbiwgd29tZW4pLCB+IHN1bSguLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9yZWFjaGVkID0gYm95cyArIGdpcmxzICsgbWVuICsgd29tZW4sIA0KICAgICAgICAgZmVtYWxlID0gKHdvbWVuICsgZ2lybHMpIC8gdG90YWxfcmVhY2hlZCwgDQogICAgICAgICBtYWxlID0gKGJveXMgKyBtZW4pIC8gdG90YWxfcmVhY2hlZCkgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyhmZW1hbGUsIG1hbGUpLCANCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gInNleCIsIA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gInBjIikgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBwYywgeSA9IGluZGljYXRvcl9zaG9ydCwgZmlsbCA9IHNleCkpICsgDQogIGdlb21fY29sKCkgKyANCiAgZ2VvbV90ZXh0KGFlcyh4ID0gcGMsIA0KICAgICAgICAgICAgICAgIHkgPSBpbmRpY2F0b3Jfc2hvcnQsIA0KICAgICAgICAgICAgICAgIGxhYmVsID0gcGVyY2VudChwYywgYWNjdXJhY3kgPSAxKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gLjUpLCANCiAgICAgICAgICAgIGNvbG91ciA9ICJ3aGl0ZSIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzQ0Mzk4MyIsICIjMzViNzc5IikpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnQpICsgDQogIGxhYnMoeCA9ICIiLCANCiAgICAgICB5ID0gIiIsIA0KICAgICAgIHRpdGxlID0gIlNleCBicmVha2Rvd24gYnkgaW5kaWNhdG9yIikgIA0KDQpgYGANCg0KPGJyPg0KDQpPbmx5IEluZGljYXRvciA2LCBDaGlsZHJlbiBiZW5lZml0aW5nIGZyb20gcmVzaWxpZW5jZS1lbmhhbmNpbmcgcHJvZ3JhbW1pbmcsIHNlZXMgYSBoaWdoZXIgcHJvcG9ydGlvbiBvZiBmZW1hbGVzIHJlYWNoZWQgb3ZlciBtZW4uIA0KDQo8YnI+DQoNCmBgYHtyIGZpZy5oZWlnaHQ9Nn0NCmVpZSAlPiUgDQogIG11dGF0ZV9hdCh2YXJzKGJveXMsIGdpcmxzLCBtZW4sIHdvbWVuKSwgfiByZXBsYWNlX25hKC4sIDApKSAlPiUNCiAgZ3JvdXBfYnkoaW5kaWNhdG9yX3Nob3J0KSAlPiUgDQogIHN1bW1hcmlzZV9hdCh2YXJzKG1lbiwgd29tZW4sIGJveXMsIGdpcmxzKSwgfiBzdW0oLikpICU+JSANCiAgZmlsdGVyKCFpcy5uYShpbmRpY2F0b3Jfc2hvcnQpKSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyhtZW4sIHdvbWVuLCBib3lzLCBnaXJscyksIA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAidHlwZSIsIA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gInJlYWNoZWQiKSAlPiUgDQogIG11dGF0ZSh0eXBlID0gc3RyX3RvX3RpdGxlKHR5cGUpLCANCiAgICAgICAgIHR5cGUgPSBmY3RfcmVsZXZlbCh0eXBlLCBjKCJNZW4iLCAiV29tZW4iLCAiQm95cyIsICJHaXJscyIpKSkgJT4lIA0KICAjIFlvdSdyZSBqdXN0IGZpbHRlcmluZyB0aGVtIG91dCBtYW51YWxseQ0KICBtdXRhdGUocmVhY2hlZCA9IGNhc2Vfd2hlbigNCiAgICBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjUiKSAmIHR5cGUgPT0gIkJveXMiIH4gMCwgDQogICAgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI1IikgJiB0eXBlID09ICJHaXJscyIgfiAwLCANCiAgICBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjYiKSAmIHR5cGUgPT0gIk1lbiIgfiAwLCANCiAgICBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjYiKSAmIHR5cGUgPT0gIldvbWVuIiB+IDAsIA0KICAgIFRSVUUgfiByZWFjaGVkDQogICkpICU+JSANCiAgZ2dwbG90KGFlcyh5ID0gdHlwZSwgeCA9IHJlYWNoZWQsIGZpbGwgPSB0eXBlKSkgKyANCiAgZ2VvbV9jb2woKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEocmVhY2hlZCkpLCANCiAgICAgICAgICAgIGhqdXN0ID0gImlud2FyZCIpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4LCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiMyMTIxMjEiKSwgDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gbnVtYmVyX2Zvcm1hdChzY2FsZSA9IDEgLyAxMDAwLCBzdWZmaXggPSAiSyIpKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKGJlZ2luID0gLjIsIGVuZCA9IC45KSArIA0KICBmYWNldF93cmFwKH4gaW5kaWNhdG9yX3Nob3J0LCBzY2FsZXMgPSAiZnJlZV94IikgKyANCiAgbGFicyh4ID0gIlBlcnNvbnMgcmVhY2hlZCIsIA0KICAgICAgIHkgPSAiIiwgDQogICAgICAgdGl0bGUgPSAiUmVhY2ggZGlzYWdncmVnYXRlZCBieSBzZXgsIGFnZSBhbmQgaW5kaWNhdG9yIikNCg0KDQpgYGANCg0KDQoNCjxicj48YnI+PGJyPg0KDQoNCiMjIDEuMyBCeSBjb3VudHkNCg0KYGBge3J9DQpjdW1fcGM8LSBlaWUgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIGdyb3VwX2J5KGNvdW50eSkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShzZWN0b3JfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBsZWZ0X2pvaW4odGFyZ2V0cyAlPiUgDQogICAgICAgICAgICAgIGRpc3RpbmN0KGNvdW50eSwgdGFyZ2V0ID0gY291bnR5X292ZXJhbGxfdGFyZ2V0KSwgDQogICAgICAgICAgICBieSA9ICJjb3VudHkiKSAlPiUgDQogIHJlcGxhY2VfbmEobGlzdCh0YXJnZXQgPSAwKSkgJT4lIA0KICBtdXRhdGUocGNfYmVuID0gcm91bmQoYmVuZWZpY2lhcmllcyAvIHN1bShiZW5lZmljaWFyaWVzKSAqIDEwMCwgZGlnaXRzID0gMiksIA0KICAgICAgICAgcGNfdGFyZ2V0ID0gcm91bmQodGFyZ2V0IC8gc3VtKHRhcmdldCkgKiAxMDAsIGRpZ2l0cyA9IDIpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhiZW5lZmljaWFyaWVzKSkgJT4lIA0KICBtdXRhdGUoY3VtX3BjID0gY3Vtc3VtKHBjX2JlbikpDQpgYGANCg0KYHIgY3VtX3BjICU+JSBmaWx0ZXIoY291bnR5ID09ICJUdXJrYW5hIikgJT4lIHB1bGwoY3VtX3BjKWAlIG9mIGFsbCBiZW5lZmljaWFyaWVzIHJlYWNoZWQgb3JpZ2luYXRlIGZyb20gVHVya2FuYSwgdGhvdWdoIGl0IG9ubHkgaGFzIGByIGN1bV9wYyAlPiUgZmlsdGVyKGNvdW50eSA9PSAiVHVya2FuYSIpICU+JSBwdWxsKHBjX3RhcmdldClgJSBvZiB0aGUgdGFyZ2V0ZWQgcG9wdWxhdGlvbi4gDQoNCjxicj4NCg0KYGBge3J9DQoNCmVpZSAlPiUgDQogIGdyb3VwX2J5KGFkbTFfcGNvZGUsIGNvdW50eSkgJT4lIA0KICBzdW1tYXJpc2Uoc2VjdG9yX3JlYWNoZWQgPSBzdW0oc2VjdG9yX3JlYWNoZWQsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgLmdyb3VwcyA9ICJkcm9wIikgJT4lIA0KICBsZWZ0X2pvaW4odGFyZ2V0cyAlPiUgDQogICAgICAgICAgICAgIGRpc3RpbmN0KGNvdW50eSwgdGFyZ2V0ID0gY291bnR5X292ZXJhbGxfdGFyZ2V0KSwgDQogICAgICAgICAgICBieSA9ICJjb3VudHkiKSAlPiUgIA0KICBtdXRhdGUoY291bnR5ID0gZmN0X3Jlb3JkZXIoY291bnR5LCBzZWN0b3JfcmVhY2hlZCkpICU+JSANCiAgZmlsdGVyKHNlY3Rvcl9yZWFjaGVkID4gMCB8IHRhcmdldCA+IDApICU+JSANCiAgbGVmdF9qb2luKGlwYyAlPiUgDQogICAgICAgICAgICAgIHNlbGVjdChhZG0xX3Bjb2RlLCBwZXJjZW50X3BoYXNlX3AzKSwgDQogICAgICAgICAgICBieSA9ICJhZG0xX3Bjb2RlIikgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoc2VjdG9yX3JlYWNoZWQsIHRhcmdldCksIA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAidHlwZSIsIA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lIA0KICBtdXRhdGUodHlwZSA9IGlmZWxzZSh0eXBlID09ICJ0YXJnZXQiLCAiQ291bnR5IFRhcmdldCIsICJTZWN0b3IgUmVhY2hlZCIpKSAlPiUgDQogIHJlcGxhY2VfbmEobGlzdCh2YWx1ZSA9IDApKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gdmFsdWUsIA0KICAgICAgICAgICAgIHkgPSBjb3VudHksIA0KICAgICAgICAgICAgIGZpbGwgPSBwZXJjZW50X3BoYXNlX3AzKSkgKyANCiAgZ2VvbV9jb2woKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEodmFsdWUpKSwgaGp1c3QgPSAiaW53YXJkIikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gbnVtYmVyX2Zvcm1hdChzY2FsZSA9IDEvMTAwMCwgc3VmZml4ID0gIksiKSkgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXMob3B0aW9uID0gImluZmVybm8iLCBiZWdpbiA9IC40LCAsIGRpcmVjdGlvbiA9IC0xLCANCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHBlcmNlbnQpICsgDQogIGZhY2V0X2dyaWQofiB0eXBlLCBzY2FsZXMgPSAiZnJlZV94Iiwgc3BhY2UgPSAiZnJlZSIpICsgDQogIGxhYnMoZmlsbCA9ICIlIElQQzMrIiwNCiAgICAgICB4ID0gIlRhcmdldC9yZWFjaGVkIiwgDQogICAgICAgeSA9ICIiLCANCiAgICAgICBjYXB0aW9uID0gIkNvbG91cnMgcmVmZXIgdG8gJSBvZiBjb3VudHkgcG9wdWxhdGlvbiBpbiBJUEMgcGhhc2UgMyBvciBhYm92ZS4gSG9tYSBCYXkgd2FzIG5vdCBhc3Nlc3NlZCBhcyBwYXJ0IG9mIHRoZSBJUEMgQ2xhc3NpZmljYXRpb24iLCANCiAgICAgICB0aXRsZSA9ICJDb21wYXJpc29uIGJldHdlZW4gdGFyZ2V0cyBhbmQgcmVhY2hlZCIpICsNCiAgdGhlbWUoIyBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSwgYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLCANCiAgICAgICAgIyBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gNSksIA0KICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4LCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiMyMTIxMjEiKSwgDQogICAgICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IC41KSkNCmBgYA0KDQpJUEMgZGF0YSBleHRyYWN0ZWQgZnJvbSBbaGVyZV0oaHR0cHM6Ly93d3cuaXBjaW5mby5vcmcvaXBjLWNvdW50cnktYW5hbHlzaXMvZGV0YWlscy1tYXAvZW4vYy8xMTU2MjEwLz9pc28zPUtFTikuDQoNCjxicj48YnI+PGJyPg0KDQoNCg0KIyAyLiBQcm9ncmVzcyBieSBpbmRpY2F0b3INCg0KIyMgMi4xIE92ZXJhbGwgcHJvZ3Jlc3MNCg0KDQoNCmBgYHtyIGZpZy5oZWlnaHQ9Nn0NCg0KbGluZV92YWx1ZXMgPC0gZWllICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBncm91cF9ieShpbmRpY2F0b3Jfc2hvcnQpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0odG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSkNCg0KDQplaWUgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIG11dGF0ZShkYXRlID0gbmFtZV90b19kYXRlKG1vbnRoKSkgJT4lIA0KICBncm91cF9ieShkYXRlLCBpbmRpY2F0b3Jfc2hvcnQpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0odG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBncm91cF9ieShpbmRpY2F0b3Jfc2hvcnQpICU+JSANCiAgYXJyYW5nZShkYXRlKSAlPiUgDQogIG11dGF0ZShjdW1fYmVuID0gY3Vtc3VtKGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIGFycmFuZ2UoaW5kaWNhdG9yX3Nob3J0KSAlPiUgIA0KICBnZ3Bsb3QoYWVzKHggPSBkYXRlLCB5ID0gY3VtX2JlbiwgY29sb3VyID0gaW5kaWNhdG9yX3Nob3J0KSkgKyANCiAgZ2VvbV9zdGVwKHNpemUgPSAxKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb21tYShiZW5lZmljaWFyaWVzKSksIA0KICAgICAgICAgICAgeCA9IC1JbmYsIHkgPSBJbmYsIGhqdXN0ID0gLTAuMTUsIHZqdXN0ID0gMC45LCBkYXRhID0gbGluZV92YWx1ZXMpICsgDQogIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcyA9ICIxIG1vbnRoIiwgZGF0ZV9sYWJlbHMgPSAiJWIiKSArIA0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsgDQogIGZhY2V0X3dyYXAofmluZGljYXRvcl9zaG9ydCwgc2NhbGVzID0gImZyZWVfeSIpICsgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDYsIGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwgDQogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA2KSwgDQogICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDYsIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiIzIxMjEyMSIpLCANCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpKSArIA0KICBsYWJzKHggPSAiIiwgDQogICAgICAgeSA9ICJDdW11bGF0aXZlIGludGVydmVudGlvbnMiLCANCiAgICAgICB0aXRsZSA9IHBhc3RlMCgiTW9udGhseSBwcm9ncmVzcyBieSBhY3Rpdml0eSwgIiwgcmVwb3J0X2RhdGUpLA0KICAgICAgIHN1YnRpdGxlID0gIkluZGljYXRvciBzdWJ0b3RhbCBpbiB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIGVhY2ggZmFjZXQiKSANCiAgDQoNCg0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQoNCiMjIDIuMiBSZWFjaGVkIGJ5IGluZGljYXRvcg0KDQpgYGB7cn0NCmJlbl9wbG90IDwtIGZ1bmN0aW9uKHRibCkgew0KICB0YmwgJT4lIA0KICAgIGdyb3VwX2J5KGluZGljYXRvcl9zaG9ydCwgY291bnR5KSAlPiUgDQogICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0odG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICAgIGZ1bGxfam9pbih0YXJnZXRzICU+JSANCiAgICAgICAgICAgICAgICBmaWx0ZXIodGFyZ2V0X3VuaXQgJWluJSBjKCJwZW9wbGUiKSkgJT4lIA0KICAgICAgICAgICAgICAgIHNlbGVjdChjb3VudHksIGluZGljYXRvcl9zaG9ydCwgY291bnR5X3RhcmdldCksIA0KICAgICAgICAgICAgICBieSA9IGMoImNvdW50eSIsICJpbmRpY2F0b3Jfc2hvcnQiKSkgJT4lIA0KICAgIHJlcGxhY2VfbmEobGlzdChjb3VudHlfdGFyZ2V0ID0gMCwgDQogICAgICAgICAgICAgICAgICAgIGJlbmVmaWNpYXJpZXMgPSAwKSkgJT4lIA0KICAgIGZpbHRlcihiZW5lZmljaWFyaWVzID4gMCkgJT4lIA0KICAgIG11dGF0ZShwYyA9IGlmZWxzZShjb3VudHlfdGFyZ2V0ID4gMCwgYmVuZWZpY2lhcmllcyAvIGNvdW50eV90YXJnZXQsIDApLCANCiAgICAgICAgICAgY291bnR5ID0gZmN0X3Jlb3JkZXIoY291bnR5LCBiZW5lZmljaWFyaWVzKSkgJT4lICANCiAgICBnZ3Bsb3QoYWVzKHggPSBiZW5lZmljaWFyaWVzLCB5ID0gY291bnR5KSkgKyANCiAgICBnZW9tX2NvbChhZXMoZmlsbCA9IHBjKSkgKw0KICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb21tYShiZW5lZmljaWFyaWVzKSwgaGp1c3QgPSAiaW53YXJkIiksIA0KICAgICAgICAgICAgICBjb2xvdXIgPSAiZ3JleTQ1IikgKyANCiAgICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsNCiAgICBzY2FsZV9maWxsX3ZpcmlkaXMoZGlyZWN0aW9uID0gLTEsIG9wdGlvbiA9ICJtYWtvIiwgDQogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHBlcmNlbnQsIGJlZ2luID0gLjIpICsgDQogICAgbGFicyh0aXRsZSA9ICJCZW5lZmljaWFyaWVzIHJlYWNoZWQiLCANCiAgICAgICAgIHggPSAiQmVuZWZpY2lhcmllcyIsIA0KICAgICAgICAgeSA9ICIiLCANCiAgICAgICAgIGZpbGwgPSAiJSByZWFjaGVkIikgDQp9DQoNCnBjX3Bsb3QgPC0gZnVuY3Rpb24odGJsKSB7DQogIHRibCAlPiUgDQogICAgZ3JvdXBfYnkoaW5kaWNhdG9yX3Nob3J0LCBjb3VudHkpICU+JSANCiAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bSh0b3RhbF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogICAgZnVsbF9qb2luKHRhcmdldHMgJT4lIA0KICAgICAgICAgICAgICAgIGZpbHRlcih0YXJnZXRfdW5pdCAlaW4lIGMoInBlb3BsZSIpKSAlPiUgDQogICAgICAgICAgICAgICAgc2VsZWN0KGNvdW50eSwgaW5kaWNhdG9yX3Nob3J0LCBjb3VudHlfdGFyZ2V0KSwgDQogICAgICAgICAgICAgIGJ5ID0gYygiY291bnR5IiwgImluZGljYXRvcl9zaG9ydCIpKSAlPiUgDQogICAgcmVwbGFjZV9uYShsaXN0KGNvdW50eV90YXJnZXQgPSAwLCANCiAgICAgICAgICAgICAgICAgICAgYmVuZWZpY2lhcmllcyA9IDApKSAlPiUgDQogICAgZmlsdGVyKGJlbmVmaWNpYXJpZXMgPiAwKSAlPiUgDQogICAgbXV0YXRlKHBjID0gaWZlbHNlKGNvdW50eV90YXJnZXQgPiAwLCBiZW5lZmljaWFyaWVzIC8gY291bnR5X3RhcmdldCwgMCksIA0KICAgICAgICAgICBjb3VudHkgPSBmY3RfcmVvcmRlcihjb3VudHksIGJlbmVmaWNpYXJpZXMpKSAlPiUgIA0KICAgIGdncGxvdChhZXMoeCA9IHBjLCB5ID0gY291bnR5KSkgKyANCiAgICBnZW9tX2NvbChhZXMoZmlsbCA9IHBjKSkgKyANCiAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGVyY2VudChwYywgYWNjdXJhY3kgPSAuMSksIGhqdXN0ID0gImlud2FyZCIpLCANCiAgICAgICAgICAgICAgY29sb3VyID0gImdyZXk0NSIpICsgDQogICAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnQpICsNCiAgICBzY2FsZV9maWxsX3ZpcmlkaXMoZGlyZWN0aW9uID0gLTEsIG9wdGlvbiA9ICJtYWtvIiwgDQogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHBlcmNlbnQsIGJlZ2luID0gLjIpICsgDQogICAgbGFicyh0aXRsZSA9ICIlIG9mIHRhcmdldCByZWFjaGVkIiwgDQogICAgICAgICB4ID0gIiUgcmVhY2hlZCIsIA0KICAgICAgICAgeSA9ICIiLCANCiAgICAgICAgIGZpbGwgPSAiJSByZWFjaGVkIikgKw0KICAgIA0KICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCn0NCmBgYA0KDQpgYGB7cn0NCnRhcmdldHNfcmFuZ2UgPC0gdGFyZ2V0cyAlPiUgDQogIGZpbHRlcih0YXJnZXRfdW5pdCA9PSAicGVvcGxlIikgJT4lIA0KICBncm91cF9ieShpbmRpY2F0b3Jfc2hvcnQsIGNvdW50eSkgJT4lIA0KICBzdW1tYXJpc2UodGFyZ2V0ID0gc3VtKGNvdW50eV90YXJnZXQsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IGluZGljYXRvcl9zaG9ydCwgdmFsdWVzX2Zyb20gPSB0YXJnZXQpICU+JSANCiAgc2V0TmFtZXMoYygiY291bnR5IiwgImluZGljYXRvcjEiLCAiaW5kaWNhdG9yMiIsICJpbmRpY2F0b3IzIiwgImluZGljYXRvcjQiLCANCiAgICAgICAgICAgICAiaW5kaWNhdG9yNSIsICJpbmRpY2F0b3I2IikpDQoNCmluZGljYXRvcl9tYXAgPC0gZnVuY3Rpb24odGJsLCBpbmRpY2F0b3JfbnVtYmVyLCBwbG90X29wdGlvbikgew0KICANCiAgcGxvdF9vcHRpb24gPC0gZW5xdW8ocGxvdF9vcHRpb24pDQogIGluZGljYXRvcl9udW1iZXIgPC0gZW5xdW8oaW5kaWNhdG9yX251bWJlcikNCiAgDQogIHRibCAlPiUgDQogICAgZmlsdGVyKHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAhIWluZGljYXRvcl9udW1iZXIpKSAlPiUgDQogICAgZ3JvdXBfYnkoaW5kaWNhdG9yX3Nob3J0LCBjb3VudHkpICU+JSANCiAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bSh0b3RhbF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogICAgZnVsbF9qb2luKHRhcmdldHMgJT4lIA0KICAgICAgICAgICAgICAgIGZpbHRlcihzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgISFpbmRpY2F0b3JfbnVtYmVyKSkgJT4lDQogICAgICAgICAgICAgICAgZmlsdGVyKHRhcmdldF91bml0ICVpbiUgYygicGVvcGxlIikpICU+JSANCiAgICAgICAgICAgICAgICBzZWxlY3QoY291bnR5LCBpbmRpY2F0b3Jfc2hvcnQsIGNvdW50eV90YXJnZXQpLCANCiAgICAgICAgICAgICAgYnkgPSBjKCJjb3VudHkiLCAiaW5kaWNhdG9yX3Nob3J0IikpICU+JSANCiAgICByZXBsYWNlX25hKGxpc3QoY291bnR5X3RhcmdldCA9IDAsIA0KICAgICAgICAgICAgICAgICAgICBiZW5lZmljaWFyaWVzID0gMCkpICU+JSANCiAgICBmaWx0ZXIoYmVuZWZpY2lhcmllcyA+IDAgfCBjb3VudHlfdGFyZ2V0ID4gMCkgICU+JSANCiAgICBtdXRhdGUocGMgPSBpZmVsc2UoY291bnR5X3RhcmdldCA+IDAsIGJlbmVmaWNpYXJpZXMgLyBjb3VudHlfdGFyZ2V0LCAwKSwgDQogICAgICAgICAgIGNvdW50eSA9IGZjdF9yZW9yZGVyKGNvdW50eSwgYmVuZWZpY2lhcmllcykpICU+JSANCiAgICBuYW5pYXI6OnJlcGxhY2Vfd2l0aF9uYShsaXN0KGJlbmVmaWNpYXJpZXMgPSAwKSkgJT4lIA0KICAgIGxlZnRfam9pbihsb2NhdGlvbnMgJT4lIA0KICAgICAgICAgICAgICAgIGRpc3RpbmN0KGNvdW50eSA9IGFkbTFfZW4sIGFkbTFfcGNvZGUpLCANCiAgICAgICAgICAgICAgYnkgPSAiY291bnR5IikgJT4lIA0KICAgIHJpZ2h0X2pvaW4ocGNvZGUxX3NoYXBlLCBieSA9IGMoImFkbTFfcGNvZGUiKSkgJT4lDQogICAgc3RfYXNfc2YoKSAlPiUgDQogICAgZ2dwbG90KCkgKyANCiAgICBnZW9tX3NmKHNpemUgPSAuMDEsIGNvbG91ciA9ICJncmV5NzAiLCANCiAgICAgICAgICAgIGFlcyhmaWxsID0gISFwbG90X29wdGlvbikpICsgDQogICAgZ2VvbV9zZl90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKCEhcGxvdF9vcHRpb24pKSwNCiAgICAgICAgICAgICAgICAgY29sb3VyID0gImdyZXk0NSIsDQogICAgICAgICAgICAgICAgIHNpemUgPSAyLjUpICsgDQogICAgc2NhbGVfZmlsbF92aXJpZGlzX2MobGFiZWxzID0gY29tbWEsIA0KICAgICAgICAgICAgICAgICAgICAgICAgIG5hLnZhbHVlID0gImdyZXk4MCIpICsgDQogICAgdGhlbWVfdm9pZCgpICsgDQogICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IC41KSkNCiAgICANCn0NCg0KYGBgDQoNCiMjIyAyLjIuMSBBY2Nlc3MgdG8gRUNEIHNwYWNlcy9zY2hvb2xzDQoNCjxicj4NCg0KYGBge3J9DQpzdW1tYXJ5X3RhYmxlICU+JSANCiAgZmlsdGVyKHN0cl9kZXRlY3QoSW5kaWNhdG9yLCAiMSIpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24ocGFzdGUwKCJFaUUgSW5kaWNhdG9yIDEsIGFzIG9mICIsIHJlcG9ydF9kYXRlKSkgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjk5KQ0KDQpgYGANCg0KPGJyPg0KDQpgYGB7cn0NCmluZGljYXRvcl9tYXAoZWllLCAiMSIsIGNvdW50eV90YXJnZXQpICsNCiAgbGFicyh0aXRsZSA9ICJUYXJnZXRzIiwgDQogICAgICAgZmlsbCA9ICJUYXJnZXQiKSAgKyANCmluZGljYXRvcl9tYXAoZWllLCAiMSIsIGJlbmVmaWNpYXJpZXMpICsgDQogIHNjYWxlX2ZpbGxfdmlyaWRpcyhsaW1pdHMgPSByYW5nZSh0YXJnZXRzX3JhbmdlJGluZGljYXRvcjEpLCANCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGNvbW1hLCANCiAgICAgICAgICAgICAgICAgICAgIG5hLnZhbHVlID0gImdyZXk4MCIpICsgDQogIGxhYnModGl0bGUgPSAiVG90YWwgcmVhY2hlZCIsIA0KICAgICAgIGZpbGwgPSAiUmVhY2hlZCIpICsNCiAgcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gIjEuIEFjY2VzcyB0byBFQ0Qgc3BhY2VzL3NjaG9vbHMsIHRhcmdldCBhbmQgcmVhY2hlZCIsIA0KICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBwYXN0ZTAoIkFzIG9mICIsIHJlcG9ydF9kYXRlKSkgDQoNCmBgYA0KDQoNCg0KPGJyPg0KDQpJbiBgciByZXBvcnRfbW9udGhgIDIwMjMsIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIxIikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kdG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHBlcnNvbnMgd2VyZSByZWFjaGVkIGJ5IGludGVydmVudGlvbnMgY29udHJpYnV0aW5nIHRvIHRoaXMgaW5kaWNhdG9yLCBvZiB3aGljaCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMSIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJGJveXMsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCB3ZXJlIGJveXMgYW5kIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIxIikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kZ2lybHMsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCB3ZXJlIGdpcmxzLg0KDQo8YnI+DQoNCmBgYHtyIGZpZy5oZWlnaHQ9Nn0NCmVpZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjEiKSkgJT4lIA0KICBwY19wbG90KCkgKw0KDQplaWUgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIxIikpICU+JSANCiAgYmVuX3Bsb3QoKSArDQogIA0KcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gIjEuIENoaWxkcmVuIGFjY2Vzc2luZyBFQ0Qgc3BhY2VzL3NjaG9vbHMsIHRhcmdldCBhbmQgcmVhY2hlZCIsIA0KICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gIkNvdW50aWVzIHdpdGhvdXQgdGFyZ2V0cyBoYXZlIDAlIHJlYWNoZWQiKQ0KDQogDQpgYGANCg0KPGJyPjxicj48YnI+DQoNCiMjIyAyLjIuMiBTY2hvb2wgZmVlZGluZyBwcm9ncmFtbWVzDQoNCjxicj4NCg0KYGBge3J9DQpzdW1tYXJ5X3RhYmxlICU+JSANCiAgZmlsdGVyKHN0cl9kZXRlY3QoSW5kaWNhdG9yLCAiMiIpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24ocGFzdGUwKCJFaUUgSW5kaWNhdG9yIDIsIGFzIG9mICIsIHJlcG9ydF9kYXRlKSkgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjk5KSANCmBgYA0KDQo8YnI+DQoNCmBgYHtyfQ0KaW5kaWNhdG9yX21hcChlaWUsICIyIiwgY291bnR5X3RhcmdldCkgKw0KICBsYWJzKHRpdGxlID0gIlRhcmdldHMiLCANCiAgICAgICBmaWxsID0gIlRhcmdldCIpICArIA0KaW5kaWNhdG9yX21hcChlaWUsICIyIiwgYmVuZWZpY2lhcmllcykgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzKGxpbWl0cyA9IHJhbmdlKHRhcmdldHNfcmFuZ2UkaW5kaWNhdG9yMiksIA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gY29tbWEsIA0KICAgICAgICAgICAgICAgICAgICAgbmEudmFsdWUgPSAiZ3JleTgwIikgKyANCiAgbGFicyh0aXRsZSA9ICJUb3RhbCByZWFjaGVkIiwgDQogICAgICAgZmlsbCA9ICJSZWFjaGVkIikgKw0KICBwbG90X2Fubm90YXRpb24odGl0bGUgPSAiMi4gU2Nob29sIGZlZWRpbmcgcHJvZ3JhbW1lcywgdGFyZ2V0IGFuZCByZWFjaGVkIiwgDQogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiQXMgb2YgIiwgcmVwb3J0X2RhdGUpKSANCg0KICANCmBgYA0KDQo8YnI+DQoNCkluIGByIHJlcG9ydF9tb250aGAgMjAyMywgYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSByZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjIiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiR0b3RhbF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgcGVyc29ucyB3ZXJlIHJlYWNoZWQgYnkgaW50ZXJ2ZW50aW9ucyBjb250cmlidXRpbmcgdG8gdGhpcyBpbmRpY2F0b3IsIG9mIHdoaWNoIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIyIikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kYm95cywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgYm95cyBhbmQgYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSByZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjIiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRnaXJscywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgZ2lybHMuIA0KDQo8YnI+DQoNCmBgYHtyfQ0KZWllICU+JSANCiAgZmlsdGVyKHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMiIpKSAlPiUgDQogIHBjX3Bsb3QoKSArDQoNCmVpZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjIiKSkgJT4lIA0KICBiZW5fcGxvdCgpICsNCiAgDQpwbG90X2Fubm90YXRpb24odGl0bGUgPSAiMi4gRmVlZGluZyBwcm9ncmFtbWVzIiwgDQogICAgICAgICAgICAgICAgc3VidGl0bGUgPSAiQ291bnRpZXMgd2l0aG91dCB0YXJnZXRzIGhhdmUgMCUgcmVhY2hlZCIpDQoNCg0KYGBgDQoNCg0KPGJyPjxicj48YnI+DQoNCiMjIyAyLjIuMyBUZWFjaGluZyBhbmQgbGVhcm5pbmcgbWF0ZXJpYWxzDQoNCjxicj4NCg0KYGBge3J9DQpzdW1tYXJ5X3RhYmxlICU+JSANCiAgZmlsdGVyKHN0cl9kZXRlY3QoSW5kaWNhdG9yLCAiMyIpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24ocGFzdGUwKCJFaUUgSW5kaWNhdG9yIDMsIGFzIG9mICIsIHJlcG9ydF9kYXRlKSkgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjk5KSANCmBgYA0KDQo8YnI+DQoNCmBgYHtyfQ0KaW5kaWNhdG9yX21hcChlaWUsICIzIiwgY291bnR5X3RhcmdldCkgKw0KICBsYWJzKHRpdGxlID0gIlRhcmdldHMiLCANCiAgICAgICBmaWxsID0gIlRhcmdldCIpICArIA0KaW5kaWNhdG9yX21hcChlaWUsICIzIiwgYmVuZWZpY2lhcmllcykgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzKGxpbWl0cyA9IHJhbmdlKHRhcmdldHNfcmFuZ2UkaW5kaWNhdG9yMyksIA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gY29tbWEsIA0KICAgICAgICAgICAgICAgICAgICAgbmEudmFsdWUgPSAiZ3JleTgwIikgKyANCiAgbGFicyh0aXRsZSA9ICJUb3RhbCByZWFjaGVkIiwgDQogICAgICAgZmlsbCA9ICJSZWFjaGVkIikgKw0KICBwbG90X2Fubm90YXRpb24odGl0bGUgPSAiMy4gVGVhY2hpbmcgYW5kIGxlYXJuaW5nIG1hdGVyaWFscywgdGFyZ2V0IGFuZCByZWFjaGVkIiwgDQogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiQXMgb2YgIiwgcmVwb3J0X2RhdGUpKSANCg0KICANCmBgYA0KDQo8YnI+DQoNCkluIGByIHJlcG9ydF9tb250aGAgMjAyMywgYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSByZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjMiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiR0b3RhbF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgcGVyc29ucyB3ZXJlIHJlYWNoZWQgYnkgaW50ZXJ2ZW50aW9ucyBjb250cmlidXRpbmcgdG8gdGhpcyBpbmRpY2F0b3IsIG9mIHdoaWNoIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIzIikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kYm95cywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgYm95cywgIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIzIikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kZ2lybHMsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCB3ZXJlIGdpcmxzLCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMyIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJG1lbiwgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgbWVuIGFuZCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMyIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJHdvbWVuLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSB3b21lbi4gDQoNCjxicj4NCg0KYGBge3J9DQplaWUgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIzIikpICU+JSANCiAgcGNfcGxvdCgpICsNCg0KZWllICU+JSANCiAgZmlsdGVyKHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMyIpKSAlPiUgDQogIGJlbl9wbG90KCkgKw0KICANCnBsb3RfYW5ub3RhdGlvbih0aXRsZSA9ICIzLiBUZWFjaGluZyBtYXRlcmlhbHMiLCANCiAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJDb3VudGllcyB3aXRob3V0IHRhcmdldHMgaGF2ZSAwJSByZWFjaGVkIikNCg0KDQpgYGANCg0KPGJyPjxicj48YnI+DQoNCiMjIyAyLjIuNCBTYWZlIHdhdGVyLCBwZXJzb25hbCBoeWdpZW5lDQoNCjxicj4NCg0KYGBge3J9DQpzdW1tYXJ5X3RhYmxlICU+JSANCiAgZmlsdGVyKHN0cl9kZXRlY3QoSW5kaWNhdG9yLCAiNCIpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24ocGFzdGUwKCJFaUUgSW5kaWNhdG9yIDQsIGFzIG9mICIsIHJlcG9ydF9kYXRlKSkgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjk5KSANCmBgYA0KDQo8YnI+DQoNCmBgYHtyfQ0KaW5kaWNhdG9yX21hcChlaWUsICI0IiwgY291bnR5X3RhcmdldCkgKw0KICBsYWJzKHRpdGxlID0gIlRhcmdldHMiLCANCiAgICAgICBmaWxsID0gIlRhcmdldCIpICArIA0KaW5kaWNhdG9yX21hcChlaWUsICI0IiwgYmVuZWZpY2lhcmllcykgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzKGxpbWl0cyA9IHJhbmdlKHRhcmdldHNfcmFuZ2UkaW5kaWNhdG9yNCksIA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gY29tbWEsIA0KICAgICAgICAgICAgICAgICAgICAgbmEudmFsdWUgPSAiZ3JleTgwIikgKyANCiAgbGFicyh0aXRsZSA9ICJUb3RhbCByZWFjaGVkIiwgDQogICAgICAgZmlsbCA9ICJSZWFjaGVkIikgKw0KICBwbG90X2Fubm90YXRpb24odGl0bGUgPSAiNC4gU2FmZSB3YXRlciwgcGVyc29uYWwgaHlnaWVuZSwgdGFyZ2V0IGFuZCByZWFjaGVkIiwgDQogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiQXMgb2YgIiwgcmVwb3J0X2RhdGUpKSANCg0KICANCmBgYA0KDQo8YnI+DQoNCkluIGByIHJlcG9ydF9tb250aGAgMjAyMywgYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSByZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjQiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiR0b3RhbF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgcGVyc29ucyB3ZXJlIHJlYWNoZWQgYnkgaW50ZXJ2ZW50aW9ucyBjb250cmlidXRpbmcgdG8gdGhpcyBpbmRpY2F0b3IsIG9mIHdoaWNoIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI0IikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kYm95cywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgYm95cyBhbmQgYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSByZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjQiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRnaXJscywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIGFuZCB3ZXJlIGdpcmxzLiANCg0KPGJyPg0KDQpgYGB7cn0NCmVpZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjQiKSkgJT4lIA0KICBwY19wbG90KCkgKw0KDQplaWUgJT4lDQogIGZpbHRlcihzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjQiKSkgJT4lIA0KICBiZW5fcGxvdCgpICsNCiAgDQpwbG90X2Fubm90YXRpb24odGl0bGUgPSAiNC4gU2FmZSB3YXRlciwgcGVyc29uYWwgaHlnaWVuZSIsIA0KICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gIkNvdW50aWVzIHdpdGhvdXQgJSByZWFjaGVkIGhhdmUgbm8gdGFyZ2V0IikNCg0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQojIyMgMi4yLjUgRWR1Y2F0b3JzIHRyYWluZWQgaW4gcmVzaWxpZW5jZSBlbmhhbmNpbmcgcHJvZ3JhbW1lcw0KDQo8YnI+DQoNCmBgYHtyfQ0Kc3VtbWFyeV90YWJsZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KEluZGljYXRvciwgIjUiKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKHBhc3RlMCgiRWlFIEluZGljYXRvciA1LCBhcyBvZiAiLCByZXBvcnRfZGF0ZSkpICU+JSANCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC45OSkgDQpgYGANCg0KPGJyPg0KDQpgYGB7cn0NCmluZGljYXRvcl9tYXAoZWllLCAiNSIsIGNvdW50eV90YXJnZXQpICsNCiAgc2NhbGVfZmlsbF92aXJpZGlzX2MobmEudmFsdWUgPSAiZ3JleTgwIiwgbGltaXRzID0gcmFuZ2UoYygwLCAxODEzKSkpICsgDQogIGxhYnModGl0bGUgPSAiVGFyZ2V0cyIsIA0KICAgICAgIGZpbGwgPSAiVGFyZ2V0IikgICsgDQppbmRpY2F0b3JfbWFwKGVpZSwgIjUiLCBiZW5lZmljaWFyaWVzKSArIA0KICBsYWJzKHRpdGxlID0gIlRvdGFsIHJlYWNoZWQiLCANCiAgICAgICBmaWxsID0gIlJlYWNoZWQiKSArDQogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9ICI1LiBFZHVjYXRvcnMgdHJhaW5lZCBpbiByZXNpbGllbmNlIGVuaGFuY2luZyBwcm9ncmFtbWVzLCB0YXJnZXQgYW5kIHJlYWNoZWQiLCANCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJBcyBvZiAiLCByZXBvcnRfZGF0ZSkpIA0KDQpgYGANCg0KPGJyPg0KDQpJbiBgciByZXBvcnRfbW9udGhgIDIwMjMsIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI1IikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kdG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHBlcnNvbnMgd2VyZSByZWFjaGVkIGJ5IGludGVydmVudGlvbnMgY29udHJpYnV0aW5nIHRvIHRoaXMgaW5kaWNhdG9yLCBvZiB3aGljaCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiNSIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJG1lbiwgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgbWVuIGFuZCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiNSIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJHdvbWVuLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgYW5kIHdlcmUgd29tZW4uIA0KDQoNCjxicj4NCg0KYGBge3J9DQplaWUgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI1IikpICU+JSANCiAgcGNfcGxvdCgpICsNCg0KZWllICU+JQ0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI1IikpICU+JSANCiAgYmVuX3Bsb3QoKSArDQogIA0KcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gIjUuIEVkdWNhdG9ycyB0cmFpbmVkIGluIHJlc2lsaWVuY2UgZW5oYW5jaW5nIHByb2dyYW1tZXMiLCANCiAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJDb3VudGllcyB3aXRob3V0ICUgcmVhY2hlZCBoYXZlIG5vIHRhcmdldCIpDQoNCg0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQojIyMgMi4yLjYgQ2hpbGRyZW4gYmVuZWZpdGVkIGZyb20gcmVzaWxpZW5jZSBlbmhhbmNpbmcgcHJvZ3JhbW1lcw0KDQo8YnI+DQoNCmBgYHtyfQ0Kc3VtbWFyeV90YWJsZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KEluZGljYXRvciwgIjYiKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKHBhc3RlMCgiRWlFIEluZGljYXRvciA2LCBhcyBvZiAiLCByZXBvcnRfZGF0ZSkpICU+JSANCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC45OSkgDQpgYGANCg0KPGJyPg0KDQpgYGB7cn0NCmluZGljYXRvcl9tYXAoZWllLCAiNiIsIGNvdW50eV90YXJnZXQpICsNCiAgbGFicyh0aXRsZSA9ICJUYXJnZXRzIiwgDQogICAgICAgZmlsbCA9ICJUYXJnZXQiKSAgKyANCmluZGljYXRvcl9tYXAoZWllLCAiNiIsIGJlbmVmaWNpYXJpZXMpICsgDQogIHNjYWxlX2ZpbGxfdmlyaWRpcyhsaW1pdHMgPSByYW5nZSh0YXJnZXRzX3JhbmdlJGluZGljYXRvcjYpLCANCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGNvbW1hLCANCiAgICAgICAgICAgICAgICAgICAgIG5hLnZhbHVlID0gImdyZXk4MCIpICsgDQogIGxhYnModGl0bGUgPSAiVG90YWwgcmVhY2hlZCIsIA0KICAgICAgIGZpbGwgPSAiUmVhY2hlZCIpICsNCiAgcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gIjYuIENoaWxkcmVuIGJlbmVmaXRlZCBmcm9tIHJlc2lsaWVuY2UgZW5oYW5jaW5nIHByb2dyYW1tZXMsIHRhcmdldCBhbmQgcmVhY2hlZCIsIA0KICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBwYXN0ZTAoIkFzIG9mICIsIHJlcG9ydF9kYXRlKSkgDQoNCmBgYA0KDQo8YnI+DQoNCkluIGByIHJlcG9ydF9tb250aGAgMjAyMywgYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSByZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjYiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiR0b3RhbF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgcGVyc29ucyB3ZXJlIHJlYWNoZWQgYnkgaW50ZXJ2ZW50aW9ucyBjb250cmlidXRpbmcgdG8gdGhpcyBpbmRpY2F0b3IsIG9mIHdoaWNoIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI2IikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kYm95cywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgYm95cyBhbmQgYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSByZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjYiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRnaXJscywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIGFuZCB3ZXJlIGdpcmxzIA0KDQoNCjxicj4NCg0KYGBge3J9DQplaWUgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI1IikpICU+JSANCiAgcGNfcGxvdCgpICsNCg0KZWllICU+JQ0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI1IikpICU+JSANCiAgYmVuX3Bsb3QoKSArDQogIA0KcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gIjYuIENoaWxkcmVuIGJlbmVmaXRlZCBmcm9tIHJlc2lsaWVuY2UgZW5oYW5jaW5nIHByb2dyYW1tZXMiLCANCiAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJDb3VudGllcyB3aXRob3V0ICUgcmVhY2hlZCBoYXZlIG5vIHRhcmdldCIpDQoNCg0KYGBgDQoNCg0KPGJyPjxicj48YnI+DQoNCiMgMy4gUGFydG5lcnMNCg0KIyMgMy4xIE9wZXJhdGlvbmFsIHByZXNlbmNlIG9mIGltcGxlbWVudGluZyBwYXJ0bmVycw0KDQo8YnI+DQoNCg0KDQpgYGB7ciB3YXJuaW5nPUZBTFNFLCBmaWcuaGVpZ2h0PTd9DQoNCnBhcnRuZXJfbWFwIDwtIGVpZSAlPiUgDQogIG11dGF0ZV9hdCh2YXJzKGJveXMsIGdpcmxzLCBtZW4sIHdvbWVuKSwgfiByZXBsYWNlX25hKC4sIDApKSAlPiUgDQogIGdyb3VwX2J5KGFkbTFfcGNvZGUsIGNvdW50eSkgJT4lIA0KICBzdW1tYXJpc2UocGFydG5lcnMgPSBuX2Rpc3RpbmN0KGltcGxlbWVudGluZ19wYXJ0bmVyKSwgDQogICAgICAgICAgICBsZWFkX29yZ2FuaXNhdGlvbiA9IG5fZGlzdGluY3QobGVhZF9vcmdhbmlzYXRpb24pLA0KICAgICAgICAgICAgYWN0aXZpdGllcyA9IG5fZGlzdGluY3QoaW5kaWNhdG9yX3Nob3J0KSwgDQogICAgICAgICAgICB3b21lbiA9IHN1bSh3b21lblthY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCJdLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgbWVuID0gc3VtKG1lblthY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCJdLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGJveXMgPSBzdW0oYm95c1thY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCJdLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGdpcmxzID0gc3VtKGdpcmxzW2FjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIl0sIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBzZWN0b3JfcmVhY2hlZCA9IHN1bShzZWN0b3JfcmVhY2hlZFthY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCJdLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgLmdyb3VwcyA9ICJkcm9wIikgJT4lIA0KICBtdXRhdGUocmVhY2hlZCA9IG1lbiArIHdvbWVuICsgYm95cyArIGdpcmxzLCANCiAgICAgICAgIG1hbGUgPSBtZW4gKyBib3lzLCANCiAgICAgICAgIGZlbWFsZSA9IHdvbWVuICsgZ2lybHMsIA0KICAgICAgICAgbWFsZV9wYyA9IHJvdW5kKG1hbGUgLyByZWFjaGVkICogMTAwKSwgDQogICAgICAgICBmZW1hbGVfcGMgPSByb3VuZChmZW1hbGUgLyByZWFjaGVkICogMTAwKSkgJT4lICANCiAgbGVmdF9qb2luKHBhcnRuZXJfbGlzdF9jb3VudGllcyAlPiUNCiAgICAgICAgICAgICAgZGlzdGluY3QoYWRtMV9wY29kZSwgYWNyb255bSkgJT4lDQogICAgICAgICAgICAgIGdyb3VwX2J5KGFkbTFfcGNvZGUpICU+JQ0KICAgICAgICAgICAgICBhcnJhbmdlKGFjcm9ueW0pICU+JSANCiAgICAgICAgICAgICAgc3VtbWFyaXNlKGFjcm9ueW0gPSBwYXN0ZTAoYWNyb255bSwgY29sbGFwc2UgPSAiLCAiKSkgJT4lDQogICAgICAgICAgICAgIG11dGF0ZShhY3JvbnltID0gc3RyX3JlcGxhY2VfYWxsKGFjcm9ueW0sICJDaGlsZEZ1bmQiLCAiQ0YiKSwgDQogICAgICAgICAgICAgICAgICAgICBuX3BhcnRuZXJzID0gc3RyX2NvdW50KGFjcm9ueW0sICIsIikgKyAxKSwgDQogICAgICAgICAgICBieSA9ICJhZG0xX3Bjb2RlIikgJT4lIA0KICBsZWZ0X2pvaW4ocGNvZGUxX3NoYXBlLCANCiAgICAgICAgICAgICBieSA9ICJhZG0xX3Bjb2RlIikgJT4lIA0KICBzdF9hc19zZigpICU+JSANCiAgZ2dwbG90KCkgKyANCiAgZ2VvbV9zZihzaXplID0gLjAxLCBjb2xvdXIgPSAiZ3JleTcwIiwgDQogICAgICAgICAgZGF0YSA9IHBjb2RlMV9zaGFwZSkgKyANCiAgZ2VvbV9zZihzaXplID0gLjAxLCBjb2xvdXIgPSAiZ3JleTcwIiwgDQogICAgICAgICAgYWVzKGZpbGwgPSBwYXJ0bmVycywgDQogICAgICAgICAgICAgIGNvbG91ciA9IGFkbTFfcGNvZGUpKSArIA0KICBnZW9tX3NmX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKCANCiAgICBjb3VudHksICJcbiIsIHBhcnRuZXJzKSwgDQogICAgICAgICAgICAgICAgICAgdGV4dCA9IHBhc3RlMCgNCiAgICAgICAgICAgICAgICAiQ291bnR5OiAiLCBjb3VudHksICJcbiIsIA0KICAgICAgICAgICAgICAgICJQYXJ0bmVyczogIiwgbl9wYXJ0bmVycywgIlxuIiwgDQogICAgICAgICAgICAgICAgIlJlYWNoZWQ6ICIsIGNvbW1hKHNlY3Rvcl9yZWFjaGVkKSwgIlxuIiwgDQogICAgICAgICAgICAgICAgIkZlbWFsZV9yZWFjaGVkJTogIiwgZmVtYWxlX3BjLCAiJSIsICJcbiIsIA0KICAgICAgICAgICAgICAgICJNYWxlX3JlYWNoZWQlOiAiLCBtYWxlX3BjLCAiJSIsIA0KICAgICAgICAgICAgICAgICJcbiIsICJcbiIsIA0KICAgICAgICAgICAgICAgIGFjcm9ueW0pKSwgDQogICAgICAgICAgICAgICAgc2l6ZSA9IDMsIGNvbG91ciA9ICJncmF5NDAiKSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXNfYyhvcHRpb24gPSAibWFrbyIsIA0KICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gLTEsDQogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDEsIDMsIDUsIDcsIDksIDExKSkgKyANCiAgDQogIHRoZW1lX3ZvaWQoKSArIA0KICAjIFJlbWVtYmVyIHRoYXQgeW91IG5lZWQgZ3VpZGVfY29sb3JiYXIsIG5vdCBndWlkZV9sZWdlbmQNCiAgIyBndWlkZXMoZmlsbCA9IGd1aWRlX2NvbG9yYmFyKHJldmVyc2UgPSBUUlVFKSkgKyANCiAgbGFicyh0aXRsZSA9ICJLRU5ZQTogRWR1Y2F0aW9uIGluIEVtZXJnZW5jaWVzIFdvcmtpbmcgR3JvdXAgb3BlcmF0aW9uYWwgcHJlc2VuY2UiLCANCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiYXMgb2YgIiwgcmVwb3J0X2RhdGUpLCANCiAgICAgICBmaWxsID0gIlBhcnRuZXJzIikNCg0KDQpnZ3Bsb3RseShwYXJ0bmVyX21hcCwgdG9vbHRpcCA9IGMoInRleHQiKSkgJT4lIA0KICBsYXlvdXQodGl0bGUgPSBsaXN0KHRleHQgPSBwYXN0ZTAoc3VtX3N0YXRzJHBhcnRuZXJzLCAiIEVpRSBpbXBsZW1lbnRpbmcgcGFydG5lcnMgYWNyb3NzICIsIHN1bV9zdGF0cyRjb3VudGllcywgIiBjb3VudGllcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGJyPiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHN1cD4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzIG9mICIsIHJlcG9ydF9kYXRlLCAiOyBtb3VzZSBvdmVyIGNvdW50eSBuYW1lIGZvciBtb3JlIGRldGFpbHMiLCAiPC9zdXA+IikpKQ0KYGBgDQoNCg0KPGJyPg0KDQpCZWxvdyBpcyBhbiBpbnRlcmFjdGl2ZSB0YWJsZSB3aGljaCBhZGRzIGRldGFpbCB0byB0aGUgbWFwIGFib3ZlLCBzZXJ2aW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGNvb3JkaW5hdGlvbiAtLSBhbGxvd2luZyBpbnRlcmVzdGVkIHBhcnRpZXMgdG8gc2VhcmNoIGJ5IGNvdW50eSBvciBwYXJ0bmVyLiANCg0KIFRoZSBjb2x1bW4gYCNBY3Rpdml0aWVzYCByZWZlcnMgdG8gdGhlIG51bWJlciBvZiBFZHVjYXRpb24gYWN0aXZpdGllcyBpbXBsZW1lbnRlZCBieSBzYWlkIHBhcnRuZXIgaW4gZWFjaCBjb3VudHkuIEVhY2ggY29sdW1uIGNhbiBiZSBzb3J0ZWQgd2l0aCB0aGUgYXJyb3dzIG5leHQgdG8gZWFjaCBjb2x1bW4gbmFtZS4gRWFjaCBjb2x1bW4gY2FuIGFsc28gYmUgZmlsdGVyZWQgYnkgdHlwaW5nIGludG8gdGhlIHNlYXJjaCBiYXIgYmVsb3cgZWFjaCBjb2x1bW4gbmFtZS4gT25seSBjb21wbGV0ZWQgYWN0aXZpdGllcyBoYXZlIGJlZW4gaW5jbHVkZWQuDQogDQpgYGB7cn0NCmVpZSAlPiUNCiAgbXV0YXRlX2F0KHZhcnMoaW1wbGVtZW50aW5nX3BhcnRuZXIsIGxlYWRfb3JnYW5pc2F0aW9uKSwgfiANCiAgICAgICAgICAgICAgc3RyX3N1YiguLCBlbmQgPSA1MEwpKSAlPiUgIA0KICBncm91cF9ieShjb3VudHksIGFkbTFfcGNvZGUsIGltcGxlbWVudGluZ19wYXJ0bmVyLCBsZWFkX29yZ2FuaXNhdGlvbikgJT4lIA0KICBzdW1tYXJpc2UocmVhY2hlZCA9IHN1bShzZWN0b3JfcmVhY2hlZFthY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCJdLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGFjdGl2aXRpZXMgPSBuX2Rpc3RpbmN0KGluZGljYXRvcl9zaG9ydCkpICU+JSANCiAgc2VsZWN0KGNvdW50eSwgaW1wbGVtZW50aW5nX3BhcnRuZXIsIGxlYWRfb3JnYW5pc2F0aW9uLCByZWFjaGVkLCBgI2FjdGl2aXRpZXNgID0gYWN0aXZpdGllcywgYWRtMV9wY29kZSkgJT4lIA0KICB3cml0ZV9jc3YoIi4vZGF0YS9icmVha2Rvd25fYnlfY291bnR5X3BhcnRuZXIuY3N2IikNCmBgYA0KIA0KDQpEb3dubG9hZCB0aGUgZGF0YXNldCBiZWxvdyBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL2tlbnlhLWVpZS13Zy9laWVfd2dfNXdzL2Jsb2IvbWFpbi9kYXRhL2JyZWFrZG93bl9ieV9jb3VudHlfcGFydG5lci5jc3YpLiANCg0KPGJyPg0KDQpgYGB7cn0NCmVpZSAlPiUNCiAgbXV0YXRlX2F0KHZhcnMoaW1wbGVtZW50aW5nX3BhcnRuZXIsIGxlYWRfb3JnYW5pc2F0aW9uKSwgfiANCiAgICAgICAgICAgICAgc3RyX3N1YiguLCBlbmQgPSA1MEwpKSAlPiUgIA0KICBncm91cF9ieShjb3VudHksIGFkbTFfcGNvZGUsIGltcGxlbWVudGluZ19wYXJ0bmVyLCBsZWFkX29yZ2FuaXNhdGlvbikgJT4lIA0KICBzdW1tYXJpc2UocmVhY2hlZCA9IHN1bShzZWN0b3JfcmVhY2hlZFthY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCJdLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGFjdGl2aXRpZXMgPSBuX2Rpc3RpbmN0KGluZGljYXRvcl9zaG9ydCkpICU+JSANCiAgbGVmdF9qb2luKHBhcnRuZXJfbGlzdF9jb3VudGllcyAlPiUgDQogICAgICAgICAgICAgIGRpc3RpbmN0KHBhcnRuZXIsIGFjcm9ueW0pLCANCiAgICAgICAgICAgIGJ5ID0gYygiaW1wbGVtZW50aW5nX3BhcnRuZXIiID0gInBhcnRuZXIiKSkgJT4lIA0KICBzZWxlY3QoY291bnR5LCBsZWFkX29yZ2FuaXNhdGlvbiwgaW1wbGVtZW50aW5nX3BhcnRuZXIsIGFjcm9ueW0sIHJlYWNoZWQsIGAjYWN0aXZpdGllc2AgPSBhY3Rpdml0aWVzLCBhZG0xX3Bjb2RlKSAlPiUgDQogIHNlbGVjdF9hbGwoLiwgfiBzdHJfdG9fdGl0bGUoLikpICU+JSANCiAgZGF0YXRhYmxlKG9wdGlvbnMgPSBsaXN0KHBhZ2VMZW5ndGggPSAxMCwgc2Nyb2xsWCA9IFRSVUUpLCANCiAgICAgICAgICAgIGZpbHRlciA9IGxpc3QocG9zaXRpb24gPSAidG9wIiwgY2xlYXIgPSBGQUxTRSksDQogICAgICAgICAgICBjYXB0aW9uID0gaHRtbHRvb2xzOjp0YWdzJGNhcHRpb24oc3R5bGUgPSAnY2FwdGlvbi1zaWRlOiB0b3A7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6MTIwJSA7JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCcmVha2Rvd24gYnkgY291bnR5IGFuZCBwYXJ0bmVyIikpICU+JSANCiAgZm9ybWF0U3R5bGUoMCwgdGFyZ2V0ID0gInJvdyIsIGxpbmVIZWlnaHQgPSAiODAlIiwgZm9udFNpemUgPSAiODAlIikgJT4lIA0KICBmb3JtYXRDdXJyZW5jeShjKCJSZWFjaGVkIiksIA0KICAgICAgICAgICAgICAgICBjdXJyZW5jeSA9ICIiLCBpbnRlcnZhbCA9IDMsIG1hcmsgPSAiLCIpICU+JSANCiAgZm9ybWF0Um91bmQoYygiUmVhY2hlZCIpLCBkaWdpdHMgPSAwKQ0KDQpgYGANCg0KDQo8YnI+PGJyPjxicj4NCg0KIyMgMy4yIFN1bW1hcnkgYnkgaW1wbGVtZW50aW5nIHBhcnRuZXINCg0KDQpUaGUgdGFibGUgYmVsb3cgYnJlYWtzIGRvd24gcGVyc29ucyByZWFjaGVkIGJ5IHBhcnRuZXIuIA0KDQo8YnI+DQoNCg0KYGBge3J9DQplaWUgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIG11dGF0ZShpbXBsZW1lbnRpbmdfcGFydG5lciA9IHN0cl9zdWIoaW1wbGVtZW50aW5nX3BhcnRuZXIsIGVuZCA9IDUwTCkpICU+JSANCiAgZ3JvdXBfYnkoaW1wbGVtZW50aW5nX3BhcnRuZXIpICU+JSANCiAgc3VtbWFyaXNlKHJlYWNoZWQgPSBzdW0odG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBjb3VudGllcyA9IG5fZGlzdGluY3QoYWRtMV9wY29kZSksIA0KICAgICAgICAgICAgYWN0aXZpdGllcyA9IG5fZGlzdGluY3QoaW5kaWNhdG9yX3Nob3J0KSkgJT4lIA0KICBmaWx0ZXIocmVhY2hlZCA+IDApICU+JSANCiAgbXV0YXRlKGAldG90YWxgID0gcm91bmQocmVhY2hlZCAvIHN1bShyZWFjaGVkKSAqIDEwMCwgZGlnaXRzID0gMikpICU+JSANCiAgYXJyYW5nZShkZXNjKHJlYWNoZWQpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF9jYXB0aW9uKCJTdW1tYXJ5IGJ5IGltcGxlbWVudGluZyBwYXJ0bmVyIikgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjkpICU+JSANCiAgZm9vdG5vdGUoaSA9IDEsIGogPSAyLCByZWZfc3ltYm9scyA9ICIxIiwgcGFydCA9ICJoZWFkZXIiLA0KICAgICAgICAgICBhc19wYXJhZ3JhcGgoIkFsbCBpbmRpY2F0b3JzIGFzIG9wcG9zZWQgb25seSBpbmRpY2F0b3JzIDEsIDIsIDUgYW5kIDYiKSkgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDUsIHJlZl9zeW1ib2xzID0gIjIiLCBwYXJ0ID0gImhlYWRlciIsDQogICAgICAgICAgIGFzX3BhcmFncmFwaCgiUGVyY2VudGFnZSBvZiByZWFjaGVkIGZvciBhbGwgaW5kaWNhdG9ycyIpKQ0KDQoNCmBgYA0KDQoNCjxicj48YnI+PGJyPg0KDQoNCiMgNC4gU2Nob29scyBhbmQgZWR1Y2F0aW9uIGxldmVsDQoNCiMjIDQuMSBTY2hvb2xzDQoNClRoZSBudW1iZXIgb2Ygc2Nob29scyByZWFjaGVkIGJ5IHNjaG9vbCBmZWVkaW5nIHByb2dyYW1tZXMgYW5kIFdBU0ggaW4gc2Nob29scyBpbnRlcnZlbnRpb25zIHRvLWRhdGUgYXJlOiANCg0KPGJyPg0KDQpgYGB7cn0NCmVpZSAlPiUgDQogIGZpbHRlcihhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgZmlsdGVyKCFpcy5uYShzY2hvb2xzKSkgJT4lDQogIG11dGF0ZShkYXRlID0gbmFtZV90b19kYXRlKG1vbnRoKSkgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIyfDQiKSkgJT4lIA0KICBncm91cF9ieShpbmRpY2F0b3Jfc2hvcnQsIGRhdGUpICU+JSANCiAgc3VtbWFyaXNlKHNjaG9vbHMgPSBzdW0oc2Nob29scyksIA0KICAgICAgICAgICAgcmVhY2hlZCA9IHN1bSh0b3RhbF9yZWFjaGVkKSkgJT4lIA0KICBhcnJhbmdlKGRhdGUpICU+JSANCiAgbXV0YXRlKGN1bV9zY2hvb2xzID0gY3Vtc3VtKHNjaG9vbHMpKSAlPiUgDQogIGFycmFuZ2UoaW5kaWNhdG9yX3Nob3J0KSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGRhdGUsIHkgPSBjdW1fc2Nob29scyksIA0KICAgICAgICAgdmp1c3QgPSAtLjUpICsgDQogIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcyA9ICIxIG1vbnRoIiwgZGF0ZV9sYWJlbHMgPSAiJWIiKSArIA0KICBnZW9tX2xpbmUoc2l6ZSA9IDEuNywgDQogICAgICAgICAgICBhZXMoY29sb3VyID0gaW5kaWNhdG9yX3Nob3J0KSkgKyANCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKGN1bV9zY2hvb2xzKSksIHZqdXN0ID0gLS41KSArDQogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gYygiIzMxNjg4ZSIsICIjZDg1NzZiIikpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsgDQogIGxhYnMoeCA9ICIiLCANCiAgICAgICB5ID0gIkN1bXVsYXRpdmUgbnVtYmVyIG9mIHNjaG9vbHMgcmVhY2hlZCIsIA0KICAgICAgIHRpdGxlID0gIlNjaG9vbHMgcmVhY2hlZCBieSBmZWVkaW5nIHByb2dyYW1tZXMgYW5kIFdBU0ggaW4gc2Nob29scyIsIA0KICAgICAgIGNvbG91ciA9ICJJbmRpY2F0b3IiKQ0KDQoNCmBgYA0KDQo8YnI+DQoNCkhvd2V2ZXIsIHJlcG9ydGluZyB0aGUgb3ZlcmFsbCBudW1iZXIgb2Ygc2Nob29scyByZWFjaGVkIGJ5IGFsbCBFaUUgaW50ZXJ2ZW50aW9ucyBpcyBtdWNoIG1vcmUgY2hhbGxlbmdpbmcuDQoNCldoaWxzdCBhbGwgcGFydG5lcnMgd29ya2luZyBvbiBpbmRpY2F0b3JzIDIgYW5kIDQgc3VibWl0dGVkIHRoZSBudW1iZXIgb2Ygc2Nob29scyB0aGV5IHdlcmUgd29ya2luZyBpbiwgdGhlIHNhbWUgaXMgbm90IHRydWUgZm9yIHRoZSBvdGhlciBpbmRpY2F0b3JzLiBPbmx5IGluZGljYXRvcnMgMiBhbmQgNCByZXF1aXJlIHRoZSByZXBvcnRpbmcgb2YgdGhlIG51bWJlciBvZiBzY2hvb2xzLiANCg0KDQoNCjxicj48YnI+PGJyPg0KDQoNCiMjIDQuMiBFZHVjYXRpb24gbGV2ZWwgDQoNClRoZSBkYXRhIGNvbGxlY3RlZCBvbiBlZHVjYXRpb24gbGV2ZWwgaXMgbXVkZGxlZDogdGhlIGNvbWJpbmF0aW9uIG9mIHZhcmlvdXMgY2F0ZWdvcmllcyAoc3VjaCBhcyBgRUNFICYgUHJpbWFyeWAgYW5kIGBBbGwgQmFzaWMgRWR1Y2F0aW9uYCkgaGFtcGVycyBhIGNsZWFuIGJyZWFrZG93biBieSBlZHVjYXRpb24gbGV2ZWw6IA0KDQo8YnI+DQoNCmBgYHtyfQ0KZWllICU+JSANCiAgbXV0YXRlX2F0KHZhcnMoZ2lybHMsIGJveXMsIG1lbiwgd29tZW4pLCB+IHJlcGxhY2VfbmEoLiwgMCkpICU+JSANCiAgZmlsdGVyKCFpcy5uYShlZHVjYXRpb25fbGV2ZWwpKSAlPiUgDQogIG11dGF0ZShjaGlsZHJlbiA9IGJveXMgKyBnaXJscykgJT4lIA0KICBncm91cF9ieShlZHVjYXRpb25fbGV2ZWwpICU+JSANCiAgc3VtbWFyaXNlKGNoaWxkcmVuID0gc3VtKGNoaWxkcmVuKSkgJT4lIA0KICBhcnJhbmdlKGRlc2MoY2hpbGRyZW4pKSAlPiUgDQogIG11dGF0ZShgJV9vZl90b3RhbGAgPSByb3VuZChjaGlsZHJlbiAvIHN1bShjaGlsZHJlbikgKiAxMDAsIGRpZ2l0cyA9IDIpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF9jYXB0aW9uKCJDaGlsZHJlbiByZWFjaGVkIGJ5IGVkdWNhdGlvbiBsZXZlbCIpICU+JSANCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC42KQ0KYGBgDQoNCjxicj4NCg0KRm9yIGluc3RhbmNlLCBpdCBpcyBub3QgcG9zc2libGUgdG8gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gc2VydmVkIGZyb20gcHJpbWFyeS1sZXZlbCBpbnN0aXR1dGlvbnMuIA0KDQpUbyB1bmRlcnN0YW5kIHJlcG9ydGluZyBhcm91bmQgdGhlIG1pc21hdGNoIG9mIGVkdWNhdGlvbi1sZXZlbCBjYXRlZ29yaWVzLCBsZXQgdXMgZXhhbWluZSBpbmRpdmlkdWFsIGluZGljYXRvcnMuIEluIHRoZSBwbG90IGJlbG93LCBjaGlsZHJlbiByZWFjaGVkIGhhdmUgYmVlbiBicm9rZW4gZG93biBieSBlZHVjYXRpb24gbGV2ZWwgYW5kIGJ5IGluZGljYXRvci4gVGhlIGNhdGVnb3J5IGBBbGwgQmFzaWMgRWR1Y2F0aW9uYCwgd2hpbHN0IHByZXNlbnQgaW4gYWxsIG9mIHRoZSBpbmRpY2F0b3JzLCBpcyBtb3N0IGhlYXZpbHkgdXNlZCBpbiB0aGUgV0FTSC1pbi1zY2hvb2xzIGludGVydmVudGlvbi4gQWRkaXRpb25hbGx5LCB0aGlzIGluZGljYXRvciBpcyB1c2VkIGJ5IDUgZGlmZmVyZW50IGltcGxlbWVudGluZyBwYXJ0bmVycy4gDQoNCjxicj4NCg0KYGBge3J9DQoNCg0KZWllICU+JSANCiAgbXV0YXRlX2F0KHZhcnMoZ2lybHMsIGJveXMsIG1lbiwgd29tZW4pLCB+IHJlcGxhY2VfbmEoLiwgMCkpICU+JSANCiAgZmlsdGVyKCFpcy5uYShlZHVjYXRpb25fbGV2ZWwpKSAlPiUgDQogIG11dGF0ZShyZWFjaGVkID0gYm95cyArIGdpcmxzICsgbWVuICsgd29tZW4pICU+JSANCiAgZ3JvdXBfYnkoZWR1Y2F0aW9uX2xldmVsLCBpbmRpY2F0b3Jfc2hvcnQpICU+JQ0KICBzdW1tYXJpc2UocmVhY2hlZCA9IHN1bShyZWFjaGVkLCBuYS5ybSA9IFRSVUUpKSAlPiUNCiAgZ3JvdXBfYnkoaW5kaWNhdG9yX3Nob3J0KSAlPiUgDQogIG11dGF0ZSh0b3RhbCA9IHN1bShyZWFjaGVkKSkgJT4lICANCiAgdW5ncm91cCgpICU+JSANCiAgbXV0YXRlKHBjID0gcmVhY2hlZCAvIHRvdGFsLCANCiAgICAgICAgIGluZGljYXRvcl9zaG9ydCA9IGZjdF9yZXYoaW5kaWNhdG9yX3Nob3J0KSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBwYywgeSA9IGluZGljYXRvcl9zaG9ydCwgZmlsbCA9IGVkdWNhdGlvbl9sZXZlbCkpICsgDQogIGdlb21fY29sKCkgKyANCiAgZ2VvbV90ZXh0KGFlcyh4ID0gcGMsIA0KICAgICAgICAgICAgICAgIHkgPSBpbmRpY2F0b3Jfc2hvcnQsIA0KICAgICAgICAgICAgICAgIGxhYmVsID0gcGVyY2VudChwYywgYWNjdXJhY3kgPSAxKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gLjUpLCANCiAgICAgICAgICAgIGNvbG91ciA9ICJ3aGl0ZSIpICsNCiAgc2NhbGVfZmlsbF92aXJpZGlzX2Qob3B0aW9uID0gInBsYXNtYSIpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnQpICsgDQogIGxhYnMoeCA9ICIiLCANCiAgICAgICB5ID0gIiIsIA0KICAgICAgIHRpdGxlID0gIkVkdWNhdGlvbi1sZXZlbCBicmVha2Rvd24gYnkgaW5kaWNhdG9yIiwgDQogICAgICAgZmlsbCA9ICIiKSArIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIikNCiAgDQpgYGANCg0KPGJyPjxicj48YnI+DQoNCg0KDQoNCg0KDQojIDUuIFJlZmVyZW5jZSBtYXBzIGFuZCB0YWJsZXMgDQoNCiMjIDUuMSBSZWZlcmVuY2UgbWFwcyANCg0KSVBDIGRhdGEgZXh0cmFjdGVkIGZyb20gW2hlcmVdKGh0dHBzOi8vd3d3LmlwY2luZm8ub3JnL2lwYy1jb3VudHJ5LWFuYWx5c2lzL2RldGFpbHMtbWFwL2VuL2MvMTE1NjIxMC8/aXNvMz1LRU4pLiANCg0KYGBge3IgZmlnLndpZHRoPTEyLCBmaWcuaGVpZ2h0PTEwfQ0KaXBjICU+JSANCiAgcmlnaHRfam9pbihwY29kZTFfc2hhcGUsIA0KICAgICAgICAgICAgIGJ5ID0gImFkbTFfcGNvZGUiKSAlPiUgDQogIHN0X2FzX3NmKCkgJT4lIA0KICBnZ3Bsb3QoKSArIA0KICBnZW9tX3NmKHNpemUgPSAuMDEsIGNvbG91ciA9ICJncmV5NzAiLCANCiAgICAgICAgICBhZXMoZmlsbCA9IG51bWJlcl9waGFzZV9wMykpICsgDQogIGdlb21fc2ZfdGV4dChhZXMobGFiZWwgPSBjb21tYShudW1iZXJfcGhhc2VfcDMpKSwgDQogICAgICAgICAgICAgICBjb2xvdXIgPSAiZ3JleTQ1IiwgDQogICAgICAgICAgICAgICBzaXplID0gMikgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzX2MobGFiZWxzID0gY29tbWEsIA0KICAgICAgICAgICAgICAgICAgICAgICBuYS52YWx1ZSA9ICJncmV5ODAiLCANCiAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gImluZmVybm8iLCBiZWdpbiA9IC40LCAsIGRpcmVjdGlvbiA9IC0xKSArIA0KICB0aGVtZV92b2lkKCkgKyANCiAgbGFicyhmaWxsID0gIkF0IGxlYXN0XG5waGFzZSAzIiwgDQogICAgICAgdGl0bGUgPSAiTnVtYmVyIG9mIHBlcnNvbnMgSVBDIFBoYXNlIDMgb3IgYWJvdmUiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJTb3VyY2U6IGh0dHBzOi8vd3d3LmlwY2luZm8ub3JnLyIpICsgDQoNCmlwYyAlPiUgDQogIHJpZ2h0X2pvaW4ocGNvZGUxX3NoYXBlLCANCiAgICAgICAgICAgICBieSA9ICJhZG0xX3Bjb2RlIikgJT4lIA0KICBzdF9hc19zZigpICU+JSANCiAgZ2dwbG90KCkgKyANCiAgZ2VvbV9zZihzaXplID0gLjAxLCBjb2xvdXIgPSAiZ3JleTcwIiwgDQogICAgICAgICAgYWVzKGZpbGwgPSBwZXJjZW50X3BoYXNlX3AzKSkgKyANCiAgZ2VvbV9zZl90ZXh0KGFlcyhsYWJlbCA9IHBlcmNlbnQocGVyY2VudF9waGFzZV9wMykpLCANCiAgICAgICAgICAgICAgIGNvbG91ciA9ICJncmV5NDUiLCANCiAgICAgICAgICAgICAgIHNpemUgPSAyKSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXNfYyhsYWJlbHMgPSBwZXJjZW50LCANCiAgICAgICAgICAgICAgICAgICAgICAgbmEudmFsdWUgPSAiZ3JleTgwIiwgDQogICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9ICJpbmZlcm5vIiwgYmVnaW4gPSAuNCwgLCBkaXJlY3Rpb24gPSAtMSkgKyANCiAgdGhlbWVfdm9pZCgpICsgDQogIGxhYnMoZmlsbCA9ICIlIElQQyBwaGFzZSAzIiwgDQogICAgICAgdGl0bGUgPSAiUGVyY2VudGFnZSBvZiBwb3B1bGF0aW9uIElQQyBQaGFzZSAzIG9yIGFib3ZlIiwgDQogICAgICAgc3VidGl0bGUgPSAiU291cmNlOiBodHRwczovL3d3dy5pcGNpbmZvLm9yZy8iKSArDQoNCg0KZWllICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBncm91cF9ieShhZG0xX3Bjb2RlKSAlPiUgDQogIHN1bW1hcmlzZShzZWN0b3JfcmVhY2hlZCA9IHN1bShzZWN0b3JfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBmaWx0ZXIoc2VjdG9yX3JlYWNoZWQgPiAwKSAlPiUgDQogIHJpZ2h0X2pvaW4ocGNvZGUxX3NoYXBlLCANCiAgICAgICAgICAgICBieSA9ICJhZG0xX3Bjb2RlIikgJT4lIA0KICBzdF9hc19zZigpICU+JSANCiAgZ2dwbG90KCkgKyANCiAgZ2VvbV9zZihzaXplID0gLjAxLCBjb2xvdXIgPSAiZ3JleTcwIiwgDQogICAgICAgICAgYWVzKGZpbGwgPSBzZWN0b3JfcmVhY2hlZCkpICsgDQogIGdlb21fc2ZfdGV4dChhZXMobGFiZWwgPSBjb21tYShzZWN0b3JfcmVhY2hlZCkpLCANCiAgICAgICAgICAgICAgIGNvbG91ciA9ICJncmV5NDUiLCANCiAgICAgICAgICAgICAgIHNpemUgPSAyKSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXMobGFiZWxzID0gY29tbWEsIA0KICAgICAgICAgICAgICAgICAgICAgICBuYS52YWx1ZSA9ICJncmV5ODAiLCANCiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9ICJtYWtvIiwgDQogICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAtMSwgDQogICAgICAgICAgICAgICAgICAgICBiZWdpbiA9IC4yLA0KICAgICAgICAgICAgICAgICAgICAgdHJhbnMgPSAibG9nIiwgDQogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDAsIDEwMCwgMTAwMCwgMTAwMDAsIDEwMDAwMCwgMzM5NDgzKSkgKyANCiAgdGhlbWVfdm9pZCgpICsgDQogIGxhYnMoZmlsbCA9ICJTZWN0b3JcbnJlYWNoZWQiLCANCiAgICAgICB0aXRsZSA9ICJSZWFjaGVkIHBlcnNvbnMiKSArIA0KICANCmVpZSAlPiUgDQogIGZpbHRlcihhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgZ3JvdXBfYnkoYWRtMV9wY29kZSkgJT4lIA0KICBzdW1tYXJpc2UocmVhY2hlZCA9IHN1bShzZWN0b3JfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBmdWxsX2pvaW4odGFyZ2V0cyAlPiUgDQogICAgICAgICAgICAgIGZpbHRlcih0YXJnZXRfdW5pdCA9PSAicGVvcGxlIikgJT4lDQogICAgICAgICAgICAgIGRpc3RpbmN0KGFkbTFfcGNvZGUsIHRhcmdldCA9IGNvdW50eV9vdmVyYWxsX3RhcmdldCkpICU+JSANCiAgcmVwbGFjZV9uYShsaXN0KHJlYWNoZWQgPSAwLCB0YXJnZXQgPSAwKSkgJT4lIA0KICBtdXRhdGUocGMgPSBpZmVsc2UodGFyZ2V0ID09IDAsIDAsIHJlYWNoZWQgLyB0YXJnZXQpKSAlPiUgDQogIHJpZ2h0X2pvaW4ocGNvZGUxX3NoYXBlLCANCiAgICAgICAgICAgICBieSA9ICJhZG0xX3Bjb2RlIikgJT4lIA0KICBzdF9hc19zZigpICU+JSANCiAgZ2dwbG90KCkgKw0KICBnZW9tX3NmKHNpemUgPSAuMDEsIGNvbG91ciA9ICJncmV5NzAiLCANCiAgICAgICAgICBhZXMoZmlsbCA9IHBjKSkgKyANCiAgZ2VvbV9zZl90ZXh0KGFlcyhsYWJlbCA9IHBlcmNlbnQocGMsIGFjY3VyYWN5ID0gMSkpLCANCiAgICAgICAgICAgICAgIGNvbG91ciA9ICJncmV5NDUiLCANCiAgICAgICAgICAgICAgIHNpemUgPSAyKSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXMobGFiZWxzID0gcGVyY2VudCwgDQogICAgICAgICAgICAgICAgICAgICAgIG5hLnZhbHVlID0gImdyZXk4MCIsDQogICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSAibWFrbyIsIA0KICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gLTEsDQogICAgICAgICAgICAgICAgICAgICBiZWdpbiA9IC4yKSArIA0KICB0aGVtZV92b2lkKCkgKyANCiAgbGFicyhmaWxsID0gIiUgb2YgdGFyZ2V0IiwgDQogICAgICAgdGl0bGUgPSAiUGVyY2VudGFnZSBvZiBvdmVyYWxsIGNvdW50eSB0YXJnZXQgcmVhY2hlZCIpICsgICANCg0KcGxvdF9sYXlvdXQobmNvbCA9IDIsIA0KICAgICAgICAgICAgbnJvdyA9IDIpDQogIA0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQoNCiMjIDUuMiBSZWZlcmVuY2UgdGFibGUgDQoNCkRvd25sb2FkIHRoZSBFaUUgNVdzIGRhdGEgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9rZW55YS1laWUtd2cvZWllX3dnXzV3cy9ibG9iL21haW4vZGF0YS9laWVfNXdzLmNzdikNCg0KQXMgYSByZWZyZXNoZXIgZm9yIHRoZSByZWZlcmVuY2UgdGFibGUgYmVsb3csIHRoZSBpbmRpY2F0b3JzIGFyZTogDQoNCjxicj4NCg0KYGBge3J9DQplaWUgJT4lIA0KICBkaXN0aW5jdChpbmRpY2F0b3IpICU+JSANCiAgYXJyYW5nZShpbmRpY2F0b3IpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMod2lkdGggPSAuODUsIGxheW91dCA9ICJhdXRvZml0IikgJT4lIA0KICBmb250c2l6ZShpID0gMTo2LCBqID0gMSwgc2l6ZSA9IDkpIA0KDQpgYGANCg0KPGJyPg0KDQoNCmBgYHtyfQ0KZWllICU+JQ0KICBtdXRhdGUoaW1wbGVtZW50aW5nX3BhcnRuZXIgPSBzdHJfc3ViKGltcGxlbWVudGluZ19wYXJ0bmVyLCBlbmQgPSA1MEwpLCANCiAgICAgICAgIGluZGljYXRvcl9udW1iZXIgPSBwYXJzZV9udW1iZXIoaW5kaWNhdG9yX3Nob3J0KSkgJT4lDQogIGdyb3VwX2J5KGNvdW50eSwgYWRtMV9wY29kZSwgaW1wbGVtZW50aW5nX3BhcnRuZXIsIGluZGljYXRvcl9udW1iZXIpICU+JSANCiAgc3VtbWFyaXNlKHJlYWNoZWQgPSBzdW0odG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBzZWxlY3QoY291bnR5LCBpbXBsZW1lbnRpbmdfcGFydG5lciwgaW5kaWNhdG9yID0gaW5kaWNhdG9yX251bWJlciwgcmVhY2hlZCwgYWRtMV9wY29kZSkgJT4lIA0KICBkYXRhdGFibGUob3B0aW9ucyA9IGxpc3QocGFnZUxlbmd0aCA9IDEwLCBzY3JvbGxYID0gVFJVRSksIA0KICAgICAgICAgICAgZmlsdGVyID0gbGlzdChwb3NpdGlvbiA9ICJ0b3AiLCBjbGVhciA9IEZBTFNFKSwNCiAgICAgICAgICAgIGNhcHRpb24gPSBodG1sdG9vbHM6OnRhZ3MkY2FwdGlvbihzdHlsZSA9ICdjYXB0aW9uLXNpZGU6IHRvcDsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZToxMjAlIDsnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJyZWFrZG93biBieSBpbmRpY2F0b3IsIGNvdW50eSBhbmQgaW1wbGVtZW50aW5nIHBhcnRuZXIiKSkgJT4lIA0KICBmb3JtYXRTdHlsZSgwLCB0YXJnZXQgPSAicm93IiwgbGluZUhlaWdodCA9ICI4MCUiLCBmb250U2l6ZSA9ICI4MCUiKSAlPiUgDQogIGZvcm1hdEN1cnJlbmN5KGMoInJlYWNoZWQiKSwgDQogICAgICAgICAgICAgICAgIGN1cnJlbmN5ID0gIiIsIGludGVydmFsID0gMywgbWFyayA9ICIsIikgJT4lIA0KICBmb3JtYXRSb3VuZChjKCJyZWFjaGVkIiksIGRpZ2l0cyA9IDApDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=